Transcription: OpenAgents Episode 064 - Lightning Withdrawals

June 9, 2026 ยท View on GitHub

Source: https://twitter.com/OpenAgentsInc/status/1752049402359754789 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 064: Lightning Withdrawals We build a UI for users to withdra... Upload date: 20240129 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T20:02:26Z

Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.

[00:00] Christopher David: Welcome back. So our agents can pay for stuff paid APIs. That's cool. For our users,

[00:11] Christopher David: our users are not going to be like earning via L-Fro2 unless they can set up their own

[00:18] Christopher David: paid APIs. And that may be something that we eventually try to make easier.

[00:25] Christopher David: Perhaps we'll work with Suelyu on that. But for purposes of a user, like a developer or

[00:34] Christopher David: other agent builder, getting paid like in our flow funds document on our wiki here.

[00:44] Christopher David: You know, we want to be able to pay people's sats for people that are uploading skills or

[00:49] Christopher David: plugins, people that are assembling stuff, you are dragging, dropping or phase. Providing

[00:57] Christopher David: compute, we've got that kind of working with GFU to be able to integrate that more tightly

[01:01] Christopher David: into the open agency to face someone who uses their API keys and we refer, so just like

[01:08] Christopher David: imagine eight different things that are going to have us want to pay people programmatically.

[01:13] Christopher David: So that's all going to be in Bitcoin Lightning because that's logical. We're going to allow

[01:23] Christopher David: people that are purchasing like end users to be able to top up their account,

[01:27] Christopher David: pay for it. It's credit cards that they want to, but for the payouts, we're going to do that

[01:32] Christopher David: all with Bitcoin Lightning. You can envision that in the future that gets more sophisticated,

[01:40] Christopher David: you know, more, I don't know, programmatic fully non-castodial setup. We'd like to

[01:49] Christopher David: move in that direction, but for like massive streams of payments, we experimented with that

[01:57] Christopher David: in the GPU Topia with draw all thing a few months ago when we were paying people sats, like

[02:03] Christopher David: every 10 seconds, we melted down our note or something broke. So we're going to do something really

[02:09] Christopher David: simple kind of the same model that we had on GPU Topia, the phase two of it, we're just going to

[02:16] Christopher David: you're going to have a balance, you're going to be able to withdraw. With GPU Topia, we had it

[02:25] Christopher David: such that you could withdraw via your connected albeacaount or Lightning invoice.

[02:32] Christopher David: I think the relevant kind of thing to start with is the Lightning address.

[02:41] Christopher David: Because what we want is the ability for someone to be paid, not just when you are at the balance

[02:51] Christopher David: screen, trying to withdraw, but let's say your threshold of payment is at 10,000 sats or like

[03:03] Christopher David: we just don't want you holding a balance more than 10,000 sats. So when it goes above that,

[03:07] Christopher David: we're just going to send it to you. We want to be able to send it to you even if you're not

[03:12] Christopher David: like specifically withdrawing. So the Lightning address, you know, like an email address for your

[03:19] Christopher David: Bitcoin, you're Lightning address lets us pull an invoice for you whenever by kind of

[03:28] Christopher David: you can request an invoice from the LNURL. Fingy, you can read the documentation about that on

[03:36] Christopher David: Lightning address.com. The good thing about albe is that if you have an albeacaount and we were

[03:43] Christopher David: during GPTobio for payouts requiring people to create albeacaount because it gives you a

[03:53] Christopher David: Lightning address already. So that's super easy. So what we're going to try here is,

[04:01] Christopher David: so I've got a long day with two different accounts. I'm logged in with my personal account at

[04:06] Christopher David: LNURL.com, on my Firefox extension and then I'm logged into the official Open Agents account,

[04:15] Christopher David: Open Agents at get albeacaount on the browser. And the goal is to have payments, demo payments in this

[04:22] Christopher David: video go from the Open Agents account or making payouts from to my personal. Okay, so we're just going to

[04:32] Christopher David: build up kind of like a withdrawal feature and we're just going to do it fully from scratch.

[04:38] Christopher David: Not fully because we're going to make use of the probably going to make use of the albe

[04:42] Christopher David: PHP SDK that we kind of pulled in and extended in the previous video. Okay, let's get started.

[05:02] Christopher David: All right, so code, Open Agents. I'll get better and better with NeoVim and terminal stuff. It's

[05:10] Christopher David: got like every little day I'm doing a little instruction videos on VIM setup. And I should maybe just say

[05:20] Christopher David: real quick that if you're trying to learn laryvel or if you want to better follow along with

[05:26] Christopher David: the development that I'm doing, larycasts, this is probably the single best developer education resource

[05:34] Christopher David: I've experienced in my life. It's like $7 a month amazing content. But there they have a series on

[05:39] Christopher David: NeoVim as a PHP and JavaScript IDE that I am starting to step through. Okay, but for now you can bear

[05:48] Christopher David: with my ugly hack in it poking around using some defaults from lazy VIM I think. Okay, so let's do some

[05:59] Christopher David: it's going to branch. We'll call this withdrawal or withdraw. Okay, we're going to do this via tests.

[06:11] Christopher David: We'll start with the feature test. Let's I guess go into there and then do that and go to tests

[06:26] Christopher David: feature and we're going to add a test for withdraw test. Okay.

[06:39] Christopher David: All right, I don't have any snippets. Set apps or we're just going to do this kind of

[07:01] Christopher David: manually. What does copilot think we should do? Factory account that doesn't exist,

[07:08] Christopher David: this acting as post withdrawal. Do you want to do this at the start of the HTTP? Let's do this first.

[07:21] Christopher David: Authyser can visit withdraw page.

[07:38] Christopher David: I'm trying to get my tab complete but this like other thing gets in the way. There we go.

[07:46] Christopher David: All right, I know that we're going to pull in. Do I need a name space there?

[07:59] Christopher David: Use app user. Okay, let's pop over to a new terminal.

[08:08] Christopher David: And do PF withdrawal?

[08:21] Christopher David: Sale is not running. I restarted my computer. Okay, sale up the.

[08:27] Christopher David: Okay, call to undefined function tests feature factory. Yeah, that's the old syntax copilot is

[08:40] Christopher David: telling us some old shit. Okay, first of all app models user.

[08:50] Christopher David: Then.

[08:54] Christopher David: User class. User factory.

[09:02] Christopher David: Create.

[09:09] Christopher David: Okay, well withdrawal is not found. So let's go do this.

[09:24] Christopher David: We'll do this in a new controller. Do I have a Bitcoin controller?

[09:36] Christopher David: Yeah, I do. Come on. Give me it. Oh, it did an auto import. That's nice.

[09:46] Christopher David: I can't eat this. Give me.

[09:55] Christopher David: Name withdrawal.

[10:01] Christopher David: All right, well, we now have a withdrawal route.

[10:07] Christopher David: But that does not exist in the controller. Can I go there? Yeah. Okay, we want a.

[10:16] Christopher David: Okay. Oh, it can even do the. USD Bitcoin price. Maybe.

[10:29] Christopher David: Okay, view withdrawn out found. Let's go to resources.

[10:35] Christopher David: Views withdraw. I believe dot PHP.

[10:50] Christopher David: No, hello. All right, well, we're saying off the user can visit the withdraw page.

[11:01] Christopher David: Let's do the counter to that, which is. Unoff the user is redirected to login page.

[11:23] Christopher David: That's pretty annoying.

[11:32] Christopher David: Okay.

[11:49] Christopher David: Route login is not defined.

[12:02] Christopher David: We've disabled login.

[12:07] Christopher David: And we also have no, we removed all of our concept of off routes. Okay, so that I'm going to skip that and we're going to come back to that later.

[12:17] Christopher David: Okay.

[12:19] Christopher David: Okay.

[12:43] Christopher David: All right, so now let's do user can initiate withdraw.

[12:49] Christopher David: And probably here.

[12:56] Christopher David: Well, we're going to need to do that again.

[13:04] Christopher David: Well, that's interesting.

[13:10] Christopher David: User can initiate withdrawal.

[13:12] Christopher David: Post to amount with amounts.

[13:23] Christopher David: Let's expect this to be sats.

[13:30] Christopher David: And then I think we're not going to have the user post in an address.

[13:37] Christopher David: Well, I think we're eventually just want to want payouts to be enabled if they attach a lightning address to their account and otherwise.

[13:55] Christopher David: All right, let's start with this.

[13:57] Christopher David: Okay.

[14:07] Christopher David: Fail this turning at 405 is equal to three or two. I think that just means that method does not exist.

[14:26] Christopher David: Okay.

[14:56] Christopher David: And let's call this.

[15:02] Christopher David: Initiate withdraw withdrawal withdrawal.

[15:15] Christopher David: Okay.

[15:19] Christopher David: Initiate withdrawal does not exist.

[15:26] Christopher David: Okay.

[15:44] Christopher David: All right, what did that do?

[15:56] Christopher David: All right, this is saying acquired integer min.

[16:05] Christopher David: We're going to say min of 10.

[16:13] Christopher David: We are not going to request the address.

[16:38] Christopher David: Address is off user Bitcoin address.

[16:44] Christopher David: Except we're going to want this to be the lightning address of the user.

[16:52] Christopher David: And then

[16:57] Christopher David: if no

[17:03] Christopher David: lightning address

[17:08] Christopher David: fail.

[17:26] Christopher David: Okay, that'll probably be changed. But

[17:31] Christopher David: let's see what happens now.

[17:37] Christopher David: Okay.

[17:42] Christopher David: This is probably happening and then it's redirecting and our test is only

[17:48] Christopher David: starting that we are

[17:52] Christopher David: redirecting. Do we want to be redirecting here?

[18:05] Christopher David: Or do we want to be returning like some HTML?

[18:10] Christopher David: Should we be creating a database object?

[18:20] Christopher David: Like withdraw. We're going to want to a record of withdraws.

[18:34] Christopher David: I think we're going to want to assert a status of 200.

[18:37] Christopher David: But you know, I actually don't know that yet. Let's do this.

[19:07] Christopher David: If it withdraw fails because the user initiates it.

[19:12] Christopher David: But the connection to the wallet is messed up.

[19:18] Christopher David: We want to be able to handle that.

[19:20] Christopher David: Like have a record of the withdraw that has been succeeded.

[19:26] Christopher David: So you're going to want a database entry for withdraw.

[19:31] Christopher David: So one thing we can assert here.

[19:37] Christopher David: First of all, is that you know, expect database to have no withdraw records.

[19:49] Christopher David: Expect withdrawal counts to be zero.

[19:59] Christopher David: and then down here, think I can yank that.

[20:07] Christopher David: After we do that, we expect it to be one. So that's one good assertion.

[20:15] Christopher David: And if we run that, test feature would draw enough found.

[20:21] Christopher David: And we're going to want to do this.

[20:37] Christopher David: At models with draw now time. So here we're going to do

[20:40] Christopher David: to do this. So our does make model and a migration with draw.

[20:52] Christopher David: Let's create our model and our database migration.

[20:55] Christopher David: So we're going to do this.

[21:04] Christopher David: Okay. Now it just fails to start that zero is identical to one because we're not actually

[21:09] Christopher David: creating a draw here. Let's get that to pass.

[21:14] Christopher David: We want this to do the withdrawal.

[21:25] Christopher David: Actually, maybe even we don't want to even process this here.

[21:30] Christopher David: Because we might do that as part of the withdrawal logic.

[21:36] Christopher David: First, let's just create a withdrawal here.

[21:45] Christopher David: Authusory withdrawals create. That's a pretty good helper method probably.

[21:52] Christopher David: And I'll just ensure that it's just making the withdrawal.

[21:56] Christopher David: Be assigned to the author and author to get a user.

[22:05] Christopher David: And the withdrawal should have the lightning address that we're trying to use there.

[22:14] Christopher David: That's probably looks good.

[22:19] Christopher David: Okay. What fails now?

[22:23] Christopher David: Still failed asserting that zero is identical to one.

[22:36] Christopher David: I think because we're hitting this.

[22:45] Christopher David: And this is actually kind of a no-no to have code.

[22:50] Christopher David: If we're doing strict TDD, which we are in this case, we don't have code that we haven't built a test file for.

[22:57] Christopher David: So we're going to just comment that out.

[23:01] Christopher David: Okay. So call to undefined method user withdrawals.

[23:05] Christopher David: Now when we're wanting there to be functionality on a user model, we're going to drop down to our unit test for user.

[23:10] Christopher David: So we're going to drop down to user test and we're going to say it has withdrawals.

[23:24] Christopher David: Let's see what that looks like.

[23:30] Christopher David: Related our imports. That's nice.

[23:39] Christopher David: Okay.

[23:47] Christopher David: Okay. So user model models user is the same areas before, but now we're kind of getting our user unit test to pass first when we go to our user model.

[24:03] Christopher David: And we said that.

[24:06] Christopher David: Probably a user has many withdrawals. So user has many withdrawals.

[24:16] Christopher David: Yeah. And then we'll import.

[24:19] Christopher David: We don't need to import it because it's in the same namespace.

[24:22] Christopher David: Okay. Let's see what our test feels with now.

[24:25] Christopher David: Okay.

[24:30] Christopher David: Add amount to fillable property to allow massive assignment on withdrawal.

[24:35] Christopher David: You can either manually specify all the fields.

[24:39] Christopher David: Usually if it doesn't matter that much, you can just protect it.

[24:43] Christopher David: Fillable equals.

[24:45] Christopher David: Like you do, projected guarded is none.

[24:49] Christopher David: You know, I may actually just kind of keep it with that.

[24:52] Christopher David: So it's a little bit more secure.

[24:56] Christopher David: That's the kind of thing where it's good if there's multiple people on a code base.

[25:00] Christopher David: You're like making sure that people can't be assigning random stuff to the fields.

[25:08] Christopher David: Well, we'll do that for now. Okay.

[25:12] Christopher David: So undefined column error column amount of where Lace relation withdrawals does not exist.

[25:22] Christopher David: Do you want to call it amount or amount like a sats?

[25:27] Christopher David: Sats are the standard. So we shouldn't need to specify that.

[25:30] Christopher David: Maybe as a comment in the database.

[25:35] Christopher David: Okay. So amount column amount of withdrawals does not exist.

[25:39] Christopher David: So for that, we go to the database migration.

[25:46] Christopher David: And we say table.

[25:49] Christopher David: Let's number numeric.

[25:59] Christopher David: A mount is going to be an integer.

[26:02] Christopher David: It is going to be unsigned.

[26:04] Christopher David: I don't know how much that is.

[26:21] Christopher David: Okay. Let's start next error.

[26:26] Christopher David: Okay.

[26:35] Christopher David: Okay.

[26:39] Christopher David: Okay. Column user ID of relation withdrawals does not exist.

[26:56] Christopher David: That's new.

[27:26] Christopher David: Okay.

[27:37] Christopher David: I don't remember what it does.

[27:45] Christopher David: All right.

[27:50] Christopher David: Class user not found here.

[28:02] Christopher David: Okay.

[28:04] Christopher David: So user can now have withdrawals.

[28:07] Christopher David: Let's pop back up to withdraw tests and see what that does now.

[28:19] Christopher David: Okay.

[28:22] Christopher David: In failed SQL transaction.

[28:32] Christopher David: That's weird.

[28:38] Christopher David: I've encountered that error before.

[28:49] Christopher David: I think it's because we are.

[29:07] Christopher David: Oh, it's because we're like.

[29:11] Christopher David: We currently are, or have a null lining address.

[29:19] Christopher David: So what we're going to do for that first is.

[29:39] Christopher David: Right.

[29:42] Christopher David: Right.

[29:43] Christopher David: Separate test.

[29:49] Christopher David: User must have.

[29:52] Christopher David: Lining address.

[29:55] Christopher David: To withdraw.

[30:05] Christopher David: So I don't know about this assert session has because that's probably not how we're going to do it.

[30:11] Christopher David: But if it'll let us move forward, that's fine.

[30:14] Christopher David: So let's do a test of just that.

[30:17] Christopher David: Pf.

[30:19] Christopher David: Lining address.

[30:21] Christopher David: Let's test filter.

[30:23] Christopher David: Okay. So undefined column user does not have Lining address.

[30:27] Christopher David: So we're going to go back down or use a test.

[30:29] Christopher David: And we're going to say it has a Lining address.

[30:36] Christopher David: And it's something that will not necessarily be set when we're creating the user.

[30:41] Christopher David: So it has to be nullable.

[30:46] Christopher David: Is an optional field, but it's going to be required for payments.

[30:50] Christopher David: Payments, Lining address.

[30:57] Christopher David: Okay.

[31:05] Christopher David: So.

[31:20] Christopher David: Go do pf.

[31:23] Christopher David: User test.

[31:28] Christopher David: Okay.

[31:32] Christopher David: Okay.

[31:39] Christopher David: Okay.

[31:44] Christopher David: Okay.

[31:48] Christopher David: Okay.

[31:57] Christopher David: So in this case, I would create a separate migration that adds Lining address to these are stable.

[32:05] Christopher David: Okay.

[32:06] Christopher David: Pf.

[32:07] Christopher David: Artisan make migration.

[32:08] Christopher David: Ad Lining address to users table.

[32:13] Christopher David: Oops.

[32:14] Christopher David: I got to do sale.

[32:16] Christopher David: Not PHP.

[32:17] Christopher David: I don't want to run it locally.

[32:18] Christopher David: I want to run it in our container.

[32:21] Christopher David: Okay.

[32:22] Christopher David: So ad Lining address.

[32:26] Christopher David: Let's go there.

[32:29] Christopher David: And here we're going to say.

[32:31] Christopher David: Tail string Lining address.

[32:33] Christopher David: No, nice.

[32:34] Christopher David: And then here we can drop it.

[32:38] Christopher David: Let's see what that does.

[32:43] Christopher David: Okay.

[32:48] Christopher David: User now has an optional Lining address.

[32:50] Christopher David: So let's pop back up to.

[32:55] Christopher David: Here.

[33:01] Christopher David: Column Lining address.

[33:04] Christopher David: Of relation with draws does not exist.

[33:15] Christopher David: I see.

[33:16] Christopher David: So we're kind of skipping past where we should expect it to be an error.

[33:19] Christopher David: But this is still the next error in front of us.

[33:21] Christopher David: This is good to do.

[33:22] Christopher David: A withdrawal is going to need all I need address.

[33:25] Christopher David: So we know where I go.

[33:26] Christopher David: So we can do that now.

[33:28] Christopher David: withdrawal.

[33:31] Christopher David: And that's going to be mandatory.

[33:41] Christopher David: Okay.

[33:43] Christopher David: No value in column Lining address.

[33:46] Christopher David: Violates the non-nel constraint.

[33:47] Christopher David: So this is just where we need to put that check in.

[33:50] Christopher David: If there's no Lining address.

[33:54] Christopher David: Fail.

[34:00] Christopher David: Which is see what that does.

[34:13] Christopher David: Okay.

[34:16] Christopher David: User must have a Lining address.

[34:18] Christopher David: So withdrawal will probably end up later reforcing for like what we want the actual air handling to be because if we're doing this in the context of an interface that we want to return an HTML response or something on the screen.

[34:30] Christopher David: We're not going to necessarily want to do an HTTP redirect.

[34:34] Christopher David: But we can refactor that later with the expected behavior and know that the failure logic is still going to be handled.

[34:40] Christopher David: Okay.

[34:42] Christopher David: So let's run our full withdrawal suite now.

[34:49] Christopher David: Okay.

[34:50] Christopher David: We're still not creating a something.

[34:53] Christopher David: What's there?

[35:00] Christopher David: Two failed.

[35:04] Christopher David: So user test.

[35:06] Christopher David: It has withdrawals.

[35:08] Christopher David: No value in column.

[35:11] Christopher David: Lightning address of relation withdrawals.

[35:14] Christopher David: Violates not null constraint.

[35:16] Christopher David: Okay.

[35:17] Christopher David: So in the user test.

[35:19] Christopher David: That's good.

[35:20] Christopher David: We have another failing test here.

[35:22] Christopher David: So here we're creating a withdrawing within a mouth.

[35:25] Christopher David: That's not good.

[35:27] Christopher David: You know what we might do here.

[35:42] Christopher David: It is a sim that's been created.

[35:52] Christopher David: And actually, I know there's a command to split this off.

[35:56] Christopher David: But I'm just going to do a manual because I don't know what it is.

[36:07] Christopher David: Okay.

[36:08] Christopher David: This will still fail.

[36:09] Christopher David: I think because we don't assign a default lightning address.

[36:17] Christopher David: That's something that we can do or should do in our factory.

[36:24] Christopher David: So let's go to our user factory.

[36:26] Christopher David: And let's say for our like a default user.

[36:31] Christopher David: We're going to generate a lightning address.

[36:33] Christopher David: And we're going to use the same syntax as email address because it is the same syntax.

[36:42] Christopher David: Okay.

[36:45] Christopher David: So does that make any difference to yeah, I does.

[36:52] Christopher David: Okay.

[36:53] Christopher David: So let's step through exactly what's happening.

[37:06] Christopher David: Violating that there's an amount.

[37:07] Christopher David: It's an integer greater than 10.

[37:10] Christopher David: We are.

[37:11] Christopher David: There should really be a test for this.

[37:14] Christopher David: We're getting the amount from what's passed in.

[37:16] Christopher David: We're getting the address from the users object.

[37:19] Christopher David: If there's no address, we're failing.

[37:23] Christopher David: We're creating a withdrawal directly on the user object via the withdrawal's relation.

[37:28] Christopher David: We could alternatively kind of do the withdrawal.

[37:32] Christopher David: Create method and passing the user ID.

[37:35] Christopher David: This is just kind of like a nice or maybe cleaner way.

[37:39] Christopher David: And then we're saying.

[37:45] Christopher David: If response status is okay, whatever defining response is probably just skipping pass that.

[37:51] Christopher David: I think.

[37:58] Christopher David: Oh, I don't think we're making any assertions about what happens after that.

[38:01] Christopher David: We're just asserting that this happened.

[38:04] Christopher David: Okay.

[38:10] Christopher David: Okay. So we're asserting that he withdrawal object was created.

[38:16] Christopher David: And yeah, in this case, we're not even saying that the withdrawal like finishes.

[38:35] Christopher David: We're just saying that the withdrawal can be initiated.

[38:41] Christopher David: And so at this stage, we should probably also initiate.

[38:45] Christopher David: We'll just call it a pending state.

[38:47] Christopher David: We should expect the withdrawal to have a status of pending, right?

[38:55] Christopher David: Because we'll update that to completely once it's actually done.

[39:00] Christopher David: Expect to the first withdrawal status to be pending.

[39:04] Christopher David: That is what we want.

[39:13] Christopher David: Okay.

[39:15] Christopher David: That will now fail.

[39:22] Christopher David: Under, oh, now why is it freaking out now about this?

[39:25] Christopher David: Under final variable response.

[39:27] Christopher David: Yes.

[39:28] Christopher David: What the hell is response?

[39:31] Christopher David: I don't know what you're talking about.

[39:41] Christopher David: I'm going to just kind of try to comment this out.

[39:43] Christopher David: And you know what? I'm going to try to use my new found them powers of.

[39:48] Christopher David: Shift the V down down down.

[39:52] Christopher David: Shift I.

[39:55] Christopher David: Comment comment escape.

[39:58] Christopher David: Good work.

[39:59] Christopher David: the

[40:06] Christopher David: of

[40:09] Christopher David: the

[40:14] Christopher David: of

[40:19] Christopher David: the

[40:24] Christopher David: of

[40:31] Christopher David: the

[40:34] Christopher David: of

[40:39] Christopher David: the

[40:44] Christopher David: of the

[40:49] Christopher David: of

[40:56] Christopher David: the

[41:01] Christopher David: of the

[41:04] Christopher David: of the

[41:09] Christopher David: of the

[41:14] Christopher David: of the

[41:21] Christopher David: of the

[41:26] Christopher David: of the

[41:29] Christopher David: of the

[41:34] Christopher David: of the

[41:39] Christopher David: of the

[41:42] Christopher David: of the

[41:49] Christopher David: of the

[41:52] Christopher David: of the

[41:54] Christopher David: of the

[42:00] Christopher David: of the

[42:07] Christopher David: of

[42:14] Christopher David: the

[42:19] Christopher David: of the

[42:25] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[42:31] Christopher David: of the

[42:38] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[42:43] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[42:49] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[42:56] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:14] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:21] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:24] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:31] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:36] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:42] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[43:49] Christopher David: the of the of the of the of the of the of the of the of the of the of the

[44:01] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[44:09] Christopher David: the of the of the of the of the of the of the of the of the of the of the of the of the

[44:14] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[44:21] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[44:26] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[44:32] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[44:39] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:04] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:11] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:19] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:29] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:36] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:44] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:51] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[45:59] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[46:06] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[46:14] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[46:24] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[46:49] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[47:14] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[47:31] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[47:40] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[47:47] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:05] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:12] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:23] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:30] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:37] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:42] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[48:50] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[48:57] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[49:15] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[49:22] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[49:30] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[49:35] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[49:40] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[49:47] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[50:05] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[50:12] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[50:20] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[50:27] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[50:45] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[50:52] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[51:03] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[51:33] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[51:40] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[51:48] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[51:58] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:05] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:16] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:23] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:30] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:35] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:43] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[52:48] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the

[53:00] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[53:06] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[53:24] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[53:31] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[53:38] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[53:51] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[54:06] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[54:16] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[54:23] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[54:41] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[54:56] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[55:11] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[55:16] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[55:31] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[55:41] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[55:48] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[55:56] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[56:14] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[56:20] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[56:45] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[57:10] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of

[57:40] Christopher David: the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[58:40] Christopher David: of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of

[59:40] Christopher David: the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the of the

[59:59] Christopher David: of

[01:00:04] Christopher David: the

[01:00:09] Christopher David: the

[01:00:54] Christopher David: the

[01:01:09] Christopher David: the

[01:01:54] Christopher David: the

[01:02:09] Christopher David: the

[01:02:24] Christopher David: the

[01:02:39] Christopher David: the

[01:03:09] Christopher David: the

[01:03:16] Christopher David: the

[01:03:24] Christopher David: the

[01:03:24] Christopher David: the

[01:03:39] Christopher David: the

[01:03:39] Christopher David: the

[01:03:52] Christopher David: the

[01:04:07] Christopher David: the

[01:04:14] Christopher David: the

[01:04:22] Christopher David: the

[01:04:29] Christopher David: the

[01:04:37] Christopher David: the

[01:04:44] Christopher David: the

[01:04:52] Christopher David: the

[01:04:59] Christopher David: the

[01:05:07] Christopher David: the

[01:05:12] Christopher David: the

[01:05:17] Christopher David: the

[01:05:24] Christopher David: the

[01:05:27] Christopher David: the

[01:05:32] Christopher David: the

[01:05:39] Christopher David: the

[01:05:47] Christopher David: the

[01:05:52] Christopher David: the

[01:05:57] Christopher David: the

[01:06:04] Christopher David: the

[01:06:07] Christopher David: the

[01:06:12] Christopher David: the

[01:06:17] Christopher David: the

[01:06:22] Christopher David: the

[01:06:29] Christopher David: the

[01:06:37] Christopher David: the

[01:06:42] Christopher David: the

[01:06:47] Christopher David: the

[01:06:54] Christopher David: the

[01:06:59] Christopher David: the

[01:07:02] Christopher David: the

[01:07:05] Christopher David: the

[01:07:07] Christopher David: the

[01:07:12] Christopher David: the

[01:07:19] Christopher David: the

[01:07:26] Christopher David: the

[01:07:32] Christopher David: the

[01:07:37] Christopher David: the

[01:07:40] Christopher David: the

[01:07:44] Christopher David: the

[01:07:51] Christopher David: the

[01:07:56] Christopher David: the

[01:07:59] Christopher David: the

[01:08:04] Christopher David: the

[01:08:09] Christopher David: the

[01:08:12] Christopher David: the

[01:08:19] Christopher David: the

[01:08:22] Christopher David: the

[01:08:27] Christopher David: the

[01:08:32] Christopher David: the

[01:08:37] Christopher David: the

[01:08:44] Christopher David: the

[01:08:47] Christopher David: the

[01:08:52] Christopher David: the

[01:08:55] Christopher David: the

[01:09:02] Christopher David: the

[01:09:09] Christopher David: the

[01:09:12] Christopher David: the

[01:09:17] Christopher David: the

[01:09:20] Christopher David: the

[01:09:22] Christopher David: the

[01:09:25] Christopher David: the

[01:09:32] Christopher David: the

[01:09:35] Christopher David: the

[01:09:40] Christopher David: the

[01:09:43] Christopher David: the

[01:09:50] Christopher David: the

[01:09:53] Christopher David: the

[01:10:00] Christopher David: the

[01:10:06] Christopher David: the

[01:10:11] Christopher David: the

[01:10:14] Christopher David: the

[01:10:18] Christopher David: the

[01:10:23] Christopher David: the

[01:10:25] Christopher David: the

[01:10:28] Christopher David: the

[01:10:33] Christopher David: the

[01:10:36] Christopher David: the

[01:10:38] Christopher David: the

[01:10:41] Christopher David: the

[01:10:43] Christopher David: the

[01:10:50] Christopher David: the

[01:10:55] Christopher David: the

[01:10:59] Christopher David: the

[01:11:01] Christopher David: the

[01:11:08] Christopher David: the

[01:11:11] Christopher David: the

[01:11:18] Christopher David: the

[01:11:23] Christopher David: the

[01:11:26] Christopher David: the

[01:11:29] Christopher David: the

[01:11:31] Christopher David: the

[01:11:33] Christopher David: the

[01:11:36] Christopher David: the

[01:11:39] Christopher David: the

[01:11:46] Christopher David: the

[01:11:48] Christopher David: the

[01:11:51] Christopher David: the

[01:11:53] Christopher David: the

[01:11:57] Christopher David: the

[01:11:59] Christopher David: the

[01:12:01] Christopher David: the

[01:12:04] Christopher David: the

[01:12:07] Christopher David: the

[01:12:12] Christopher David: the

[01:12:14] Christopher David: the

[01:12:17] Christopher David: the

[01:12:21] Christopher David: the

[01:12:22] Christopher David: the

[01:12:25] Christopher David: the

[01:12:27] Christopher David: the

[01:12:32] Christopher David: the

[01:12:35] Christopher David: the

[01:12:42] Christopher David: the

[01:12:45] Christopher David: the

[01:12:50] Christopher David: the

[01:12:53] Christopher David: the

[01:12:55] Christopher David: the

[01:12:58] Christopher David: the

[01:13:00] Christopher David: the

[01:13:03] Christopher David: the

[01:13:08] Christopher David: the

[01:13:10] Christopher David: the

[01:13:12] Christopher David: the

[01:13:15] Christopher David: the

[01:13:18] Christopher David: the

[01:13:21] Christopher David: the

[01:13:23] Christopher David: the

[01:13:26] Christopher David: the

[01:13:28] Christopher David: the

[01:13:30] Christopher David: the

[01:13:37] Christopher David: the

[01:13:40] Christopher David: the

[01:13:42] Christopher David: the

[01:13:45] Christopher David: the

[01:13:48] Christopher David: the

[01:13:50] Christopher David: the

[01:13:52] Christopher David: the

[01:13:55] Christopher David: the

[01:13:58] Christopher David: the

[01:14:05] Christopher David: the

[01:14:08] Christopher David: the

[01:14:10] Christopher David: the

[01:14:13] Christopher David: the

[01:14:16] Christopher David: the

[01:14:18] Christopher David: the

[01:14:19] Christopher David: the

[01:14:21] Christopher David: the

[01:14:23] Christopher David: the

[01:14:25] Christopher David: the

[01:14:27] Christopher David: the

[01:14:31] Christopher David: the

[01:14:33] Christopher David: the

[01:14:35] Christopher David: the

[01:14:36] Christopher David: the

[01:14:38] Christopher David: the

[01:14:41] Christopher David: the

[01:14:44] Christopher David: the

[01:14:46] Christopher David: the

[01:14:49] Christopher David: the

[01:14:51] Christopher David: the

[01:14:54] Christopher David: the

[01:15:24] Christopher David: the

[01:15:31] Christopher David: the

[01:15:39] Christopher David: the

[01:15:42] Christopher David: the

[01:15:44] Christopher David: the

[01:15:46] Christopher David: the

[01:15:49] Christopher David: the

[01:15:51] Christopher David: the

[01:15:53] Christopher David: the

[01:15:57] Christopher David: the

[01:15:59] Christopher David: the

[01:16:01] Christopher David: the

[01:16:02] Christopher David: the

[01:16:04] Christopher David: the

[01:16:07] Christopher David: the

[01:16:08] Christopher David: the

[01:16:10] Christopher David: the

[01:16:12] Christopher David: the

[01:16:14] Christopher David: the

[01:16:17] Christopher David: the

[01:16:19] Christopher David: the

[01:16:26] Christopher David: the

[01:16:29] Christopher David: the

[01:16:34] Christopher David: the

[01:16:39] Christopher David: the

[01:16:44] Christopher David: the

[01:16:47] Christopher David: the

[01:16:54] Christopher David: the

[01:16:57] Christopher David: the

[01:17:07] Christopher David: the

[01:17:12] Christopher David: the

[01:17:14] Christopher David: the

[01:17:15] Christopher David: the

[01:17:17] Christopher David: the

[01:17:21] Christopher David: the

[01:17:23] Christopher David: the

[01:17:26] Christopher David: the

[01:17:28] Christopher David: the

[01:17:31] Christopher David: the

[01:17:34] Christopher David: the

[01:17:36] Christopher David: the

[01:17:39] Christopher David: the

[01:17:41] Christopher David: the

[01:17:45] Christopher David: the

[01:17:49] Christopher David: the

[01:17:51] Christopher David: the

[01:17:54] Christopher David: the

[01:17:58] Christopher David: the

[01:18:02] Christopher David: the

[01:18:04] Christopher David: the

[01:18:09] Christopher David: the

[01:18:12] Christopher David: the

[01:18:19] Christopher David: the

[01:18:22] Christopher David: the

[01:18:27] Christopher David: the

[01:18:30] Christopher David: the

[01:18:32] Christopher David: the

[01:18:37] Christopher David: the

[01:18:40] Christopher David: the

[01:18:47] Christopher David: the

[01:18:50] Christopher David: the

[01:18:54] Christopher David: the

[01:18:58] Christopher David: the

[01:19:00] Christopher David: the

[01:19:02] Christopher David: the

[01:19:05] Christopher David: the

[01:19:07] Christopher David: the

[01:19:09] Christopher David: the

[01:19:13] Christopher David: the

[01:19:15] Christopher David: the

[01:19:17] Christopher David: the

[01:19:18] Christopher David: the

[01:19:20] Christopher David: the

[01:19:22] Christopher David: the

[01:19:24] Christopher David: the

[01:19:26] Christopher David: the

[01:19:28] Christopher David: the

[01:19:29] Christopher David: the

[01:19:30] Christopher David: the

[01:19:31] Christopher David: the

[01:19:33] Christopher David: the

[01:19:35] Christopher David: the

[01:19:36] Christopher David: the

[01:19:41] Christopher David: the

[01:19:43] Christopher David: the

[01:19:44] Christopher David: the

[01:19:46] Christopher David: the

[01:19:48] Christopher David: the

[01:19:51] Christopher David: the

[01:19:54] Christopher David: the

[01:19:56] Christopher David: the

[01:19:57] Christopher David: the

[01:19:59] Christopher David: the

[01:20:01] Christopher David: the

[01:19:59] Christopher David: change that and then it says be comment

[01:20:07] Christopher David: okay let's try that URL

[01:20:13] Christopher David: Ta-da! Okay!

[01:20:18] Christopher David: Well there it is!

[01:20:22] Christopher David: So let's do that

[01:20:26] Christopher David: that

[01:20:27] Christopher David: is Jason what I want

[01:20:40] Christopher David: Yeah it's good

[01:20:51] Christopher David: I'm going to

[01:20:55] Christopher David: return

[01:20:57] Christopher David: the invoice part of that

[01:21:08] Christopher David: and then our Bitcoin test

[01:21:13] Christopher David: I'm going to assert it to have

[01:21:24] Christopher David: expect it

[01:21:28] Christopher David: to have

[01:21:31] Christopher David: fields PR routes status

[01:21:35] Christopher David: success action

[01:21:38] Christopher David: and verify

[01:21:57] Christopher David: and

[01:22:12] Christopher David: expect invoice status to be okay

[01:22:17] Christopher David: and then

[01:22:26] Christopher David: okay

[01:22:34] Christopher David: Ta-da!

[01:22:37] Christopher David: So that works

[01:22:40] Christopher David: I'm going to put this in integration test

[01:22:42] Christopher David: because I don't actually every time we run all our tests

[01:22:43] Christopher David: I don't want to skip over this

[01:22:47] Christopher David: like an opt-in-do

[01:22:50] Christopher David: run-in-s

[01:22:52] Christopher David: I just wanted to take a couple of seconds

[01:22:54] Christopher David: and generate an actual invoice

[01:23:01] Christopher David: Now that we can fetch an invoice for a lighting address

[01:23:08] Christopher David: we can

[01:23:10] Christopher David: pay the invoice

[01:23:12] Christopher David: we already built that

[01:23:16] Christopher David: yeah pay invoice

[01:23:19] Christopher David: okay so let's try to just get the thing working

[01:23:28] Christopher David: so withdraw all

[01:23:29] Christopher David: great to withdraw the object

[01:23:36] Christopher David: let's

[01:23:38] Christopher David: generate

[01:23:41] Christopher David: an invoice

[01:23:45] Christopher David: we're pulling in the Bitcoin objects

[01:23:48] Christopher David: service rather yes

[01:23:51] Christopher David: okay so

[01:23:55] Christopher David: invoice equals

[01:23:59] Christopher David: boom

[01:24:02] Christopher David: the lighting address

[01:24:04] Christopher David: the amount

[01:24:05] Christopher David: the memo

[01:24:10] Christopher David: the amount

[01:24:14] Christopher David: let's just see if this works via our interface

[01:24:18] Christopher David: what did I do?

[01:24:21] Christopher David: what did I do?

[01:24:24] Christopher David: then dip, stop going

[01:24:31] Christopher David: new new new new

[01:24:34] Christopher David: all right going back

[01:24:37] Christopher David: to where was I?

[01:24:40] Christopher David: local host

[01:24:46] Christopher David: I want an invoice for 42 sets

[01:24:50] Christopher David: I made it to you

[01:24:52] Christopher David: yeah I got a multiply for the msats

[01:24:59] Christopher David: so Bitcoin controller

[01:25:05] Christopher David: amounts

[01:25:10] Christopher David: okay

[01:25:14] Christopher David: try to

[01:25:21] Christopher David: 42 sets

[01:25:24] Christopher David: giving an invoice for 52 sets

[01:25:27] Christopher David: okay

[01:25:33] Christopher David: I want the PR

[01:26:11] Christopher David: payment request

[01:26:23] Christopher David: payment request

[01:26:31] Christopher David: all right I may want to implement that

[01:26:34] Christopher David: so go wrap or I'm just for now

[01:26:36] Christopher David: I'm just going to visualize that because I just want to get this done

[01:26:39] Christopher David: I'll be client equals

[01:26:41] Christopher David: do I'll be client

[01:26:45] Christopher David: passing in

[01:26:49] Christopher David: I'll be accessed token

[01:26:54] Christopher David: and then I'll say yeah that's probably what I want

[01:27:00] Christopher David: okay

[01:27:06] Christopher David: okay let's see if this actually pays me

[01:27:12] Christopher David: while I'm not pulling it out be clients

[01:27:14] Christopher David: so need to

[01:27:15] Christopher David: put in

[01:27:18] Christopher David: use

[01:27:20] Christopher David: that's not right

[01:27:22] Christopher David: Bitcoin

[01:27:27] Christopher David: I need this

[01:27:31] Christopher David: this

[01:27:33] Christopher David: this

[01:27:41] Christopher David: great

[01:27:42] Christopher David: that would draw

[01:27:43] Christopher David: generating an invoice

[01:27:45] Christopher David: pay the invoice and then I'll update the withdrawal assuming it's successful

[01:27:49] Christopher David: for now let me see the payment

[01:27:51] Christopher David: okay so I got

[01:27:54] Christopher David: I want to have land just pleb to be paid

[01:27:57] Christopher David: 190

[01:28:01] Christopher David: and I want

[01:28:05] Christopher David: it to come from this this is my open agents

[01:28:10] Christopher David: so decrease from

[01:28:13] Christopher David: 8 9

[01:28:16] Christopher David: so I'll do

[01:28:18] Christopher David: pay me 21 sets please

[01:28:31] Christopher David: oh yeah

[01:28:33] Christopher David: oh yeah

[01:28:34] Christopher David: open agents withdraw

[01:28:35] Christopher David: plus 21 sets

[01:28:37] Christopher David: I like it

[01:28:39] Christopher David: I like it

[01:28:42] Christopher David: all right we got some

[01:28:43] Christopher David: oh no

[01:28:47] Christopher David: why

[01:28:48] Christopher David: why

[01:28:49] Christopher David: why

[01:28:57] Christopher David: all right let's update the status of the withdrawal

[01:29:05] Christopher David: let's do that be a test

[01:29:07] Christopher David: so we'll go to

[01:29:19] Christopher David: the

[01:29:26] Christopher David: the draw test

[01:29:31] Christopher David: feature

[01:29:50] Christopher David: so for now

[01:29:54] Christopher David: we are

[01:29:57] Christopher David: just going to do all of the logic in the actual HTTP endpoint

[01:30:01] Christopher David: so we're not actually

[01:30:03] Christopher David: by the time we get down to here

[01:30:05] Christopher David: I want this to say complete it

[01:30:08] Christopher David: and then we can like add additional

[01:30:12] Christopher David: of the fields to the withdrawal

[01:30:15] Christopher David: for accounting purposes

[01:30:18] Christopher David: we'll do like the accounting

[01:30:20] Christopher David: maybe in the next video

[01:30:24] Christopher David: so yeah let's

[01:30:26] Christopher David: let me get back to my sweet failing test here

[01:30:35] Christopher David: okay so

[01:30:37] Christopher David: run user can initiate withdrawal

[01:30:41] Christopher David: okay

[01:30:45] Christopher David: right now we're just

[01:30:47] Christopher David: dyad jumping the payment

[01:30:49] Christopher David: oh no another payment went through

[01:30:51] Christopher David: so let's go back to Bitcoin controller

[01:31:07] Christopher David: don't

[01:31:11] Christopher David: don't dump the response

[01:31:14] Christopher David: if payment

[01:31:17] Christopher David: succeeds

[01:31:21] Christopher David: mark withdrawal

[01:31:23] Christopher David: as completed

[01:31:37] Christopher David: payment

[01:31:50] Christopher David: pre-image

[01:31:55] Christopher David: we know it succeeds

[01:31:57] Christopher David: if payment pre-image

[01:31:59] Christopher David: is

[01:32:02] Christopher David: the

[01:32:07] Christopher David: response is in a range

[01:32:11] Christopher David: so

[01:32:16] Christopher David: response

[01:32:19] Christopher David: boom

[01:32:22] Christopher David: boom

[01:32:27] Christopher David: boom

[01:32:30] Christopher David: boom

[01:32:34] Christopher David: boom

[01:32:39] Christopher David: boom

[01:32:40] Christopher David: boom

[01:32:43] Christopher David: boom

[01:32:45] Christopher David: boom

[01:32:47] Christopher David: boom

[01:32:51] Christopher David: boom

[01:32:54] Christopher David: boom

[01:32:55] Christopher David: boom

[01:32:56] Christopher David: boom

[01:32:59] Christopher David: boom

[01:33:01] Christopher David: boom

[01:33:03] Christopher David: boom

[01:33:06] Christopher David: boom

[01:33:08] Christopher David: boom

[01:33:10] Christopher David: boom

[01:33:12] Christopher David: boom

[01:33:14] Christopher David: boom

[01:33:18] Christopher David: boom

[01:33:23] Christopher David: boom

[01:33:24] Christopher David: boom

[01:33:28] Christopher David: boom

[01:33:29] Christopher David: boom

[01:33:31] Christopher David: boom

[01:33:34] Christopher David: boom

[01:33:37] Christopher David: boom

[01:33:41] Christopher David: boom

[01:33:45] Christopher David: boom

[01:33:49] Christopher David: boom

[01:33:50] Christopher David: boom

[01:33:53] Christopher David: boom

[01:33:55] Christopher David: boom

[01:33:57] Christopher David: boom

[01:33:59] Christopher David: boom

[01:34:01] Christopher David: boom

[01:34:03] Christopher David: boom

[01:34:06] Christopher David: boom

[01:34:08] Christopher David: boom

[01:34:10] Christopher David: boom

[01:34:12] Christopher David: boom

[01:34:15] Christopher David: boom

[01:34:17] Christopher David: boom

[01:34:20] Christopher David: boom

[01:34:22] Christopher David: boom

[01:34:24] Christopher David: boom

[01:34:26] Christopher David: boom

[01:34:29] Christopher David: boom

[01:34:31] Christopher David: boom

[01:34:33] Christopher David: boom

[01:34:35] Christopher David: boom

[01:34:37] Christopher David: boom

[01:34:39] Christopher David: boom

[01:34:41] Christopher David: boom

[01:34:42] Christopher David: boom

[01:34:44] Christopher David: boom

[01:34:45] Christopher David: boom

[01:34:46] Christopher David: boom

[01:34:47] Christopher David: boom

[01:34:49] Christopher David: boom

[01:34:51] Christopher David: boom

[01:34:54] Christopher David: boom

[01:34:55] Christopher David: boom

[01:34:56] Christopher David: boom

[01:34:57] Christopher David: boom

[01:34:58] Christopher David: boom

[01:34:59] Christopher David: boom

[01:35:00] Christopher David: boom

[01:35:01] Christopher David: boom

[01:35:02] Christopher David: boom

[01:35:03] Christopher David: boom

[01:35:04] Christopher David: boom

[01:35:05] Christopher David: boom

[01:35:06] Christopher David: boom

[01:35:08] Christopher David: boom

[01:35:09] Christopher David: boom

[01:35:12] Christopher David: boom

[01:35:13] Christopher David: boom

[01:35:14] Christopher David: boom

[01:35:15] Christopher David: boom

[01:35:17] Christopher David: boom

[01:35:19] Christopher David: boom

[01:35:21] Christopher David: boom

[01:35:22] Christopher David: boom

[01:35:23] Christopher David: boom

[01:35:24] Christopher David: boom

[01:35:25] Christopher David: boom

[01:35:26] Christopher David: boom

[01:35:28] Christopher David: boom

[01:35:29] Christopher David: boom

[01:35:30] Christopher David: boom

[01:35:32] Christopher David: boom

[01:35:34] Christopher David: boom

[01:35:36] Christopher David: boom

[01:35:37] Christopher David: boom

[01:35:39] Christopher David: boom

[01:35:40] Christopher David: boom

[01:35:41] Christopher David: boom

[01:35:42] Christopher David: boom

[01:35:43] Christopher David: boom

[01:35:45] Christopher David: boom

[01:35:46] Christopher David: boom

[01:35:47] Christopher David: boom

[01:35:48] Christopher David: boom

[01:35:49] Christopher David: boom

[01:35:50] Christopher David: boom

[01:35:51] Christopher David: boom

[01:35:52] Christopher David: boom

[01:35:53] Christopher David: boom

[01:35:54] Christopher David: boom

[01:35:55] Christopher David: boom

[01:35:56] Christopher David: boom

[01:35:57] Christopher David: boom

[01:35:58] Christopher David: boom

[01:35:59] Christopher David: boom

[01:36:00] Christopher David: boom

[01:36:01] Christopher David: boom

[01:36:02] Christopher David: boom

[01:36:03] Christopher David: boom

[01:36:04] Christopher David: boom

[01:36:05] Christopher David: boom

[01:36:06] Christopher David: boom

[01:36:07] Christopher David: boom

[01:36:08] Christopher David: boom

[01:36:09] Christopher David: boom

[01:36:10] Christopher David: boom

[01:36:11] Christopher David: boom

[01:36:12] Christopher David: boom

[01:36:13] Christopher David: boom

[01:36:14] Christopher David: boom

[01:36:15] Christopher David: boom

[01:36:16] Christopher David: boom

[01:36:17] Christopher David: boom

[01:36:18] Christopher David: boom

[01:36:19] Christopher David: boom

[01:36:20] Christopher David: boom

[01:36:21] Christopher David: boom

[01:36:22] Christopher David: boom

[01:36:23] Christopher David: boom

[01:36:24] Christopher David: boom

[01:36:25] Christopher David: boom

[01:36:26] Christopher David: boom

[01:36:27] Christopher David: boom

[01:36:28] Christopher David: boom

[01:36:29] Christopher David: boom

[01:36:30] Christopher David: boom

[01:36:31] Christopher David: boom

[01:36:32] Christopher David: boom

[01:36:33] Christopher David: boom

[01:36:35] Christopher David: boom

[01:36:36] Christopher David: boom

[01:36:37] Christopher David: boom

[01:36:38] Christopher David: boom

[01:36:39] Christopher David: boom

[01:36:40] Christopher David: boom

[01:36:41] Christopher David: boom

[01:36:43] Christopher David: boom

[01:36:44] Christopher David: boom

[01:36:45] Christopher David: boom

[01:36:47] Christopher David: boom

[01:36:48] Christopher David: boom

[01:36:49] Christopher David: boom

[01:36:50] Christopher David: boom

[01:36:51] Christopher David: boom

[01:36:52] Christopher David: boom

[01:36:53] Christopher David: boom

[01:36:54] Christopher David: boom

[01:36:55] Christopher David: boom

[01:36:56] Christopher David: boom

[01:36:57] Christopher David: boom

[01:36:58] Christopher David: boom

[01:36:59] Christopher David: boom

[01:37:00] Christopher David: boom

[01:37:01] Christopher David: boom

[01:37:02] Christopher David: boom

[01:37:04] Christopher David: boom

[01:37:05] Christopher David: boom

[01:37:06] Christopher David: boom

[01:37:07] Christopher David: boom

[01:37:08] Christopher David: boom

[01:37:09] Christopher David: boom

[01:37:10] Christopher David: boom

[01:37:11] Christopher David: boom

[01:37:12] Christopher David: boom

[01:37:13] Christopher David: boom

[01:37:14] Christopher David: boom

[01:37:15] Christopher David: boom

[01:37:16] Christopher David: boom

[01:37:17] Christopher David: boom

[01:37:18] Christopher David: boom

[01:37:19] Christopher David: boom

[01:37:20] Christopher David: boom

[01:37:21] Christopher David: boom

[01:37:22] Christopher David: boom

[01:37:23] Christopher David: boom

[01:37:24] Christopher David: boom

[01:37:25] Christopher David: boom

[01:37:26] Christopher David: boom

[01:37:27] Christopher David: boom

[01:37:28] Christopher David: boom

[01:37:29] Christopher David: boom

[01:37:30] Christopher David: boom

[01:37:31] Christopher David: boom

[01:37:33] Christopher David: boom

[01:37:34] Christopher David: boom

[01:37:35] Christopher David: boom

[01:37:36] Christopher David: boom

[01:37:37] Christopher David: boom

[01:37:38] Christopher David: boom

[01:37:39] Christopher David: boom

[01:37:40] Christopher David: boom

[01:37:41] Christopher David: boom

[01:37:42] Christopher David: boom

[01:37:43] Christopher David: boom

[01:37:44] Christopher David: boom

[01:37:45] Christopher David: boom

[01:37:46] Christopher David: boom

[01:37:47] Christopher David: boom

[01:37:48] Christopher David: boom

[01:37:49] Christopher David: boom

[01:37:50] Christopher David: boom

[01:37:51] Christopher David: boom

[01:37:52] Christopher David: boom

[01:37:53] Christopher David: boom

[01:37:54] Christopher David: boom

[01:37:55] Christopher David: boom

[01:37:56] Christopher David: boom

[01:37:57] Christopher David: boom

[01:37:58] Christopher David: boom

[01:37:59] Christopher David: boom

[01:38:00] Christopher David: boom

[01:38:01] Christopher David: boom

[01:38:03] Christopher David: boom

[01:38:04] Christopher David: boom

[01:38:05] Christopher David: boom

[01:38:06] Christopher David: boom

[01:38:07] Christopher David: boom

[01:38:08] Christopher David: boom

[01:38:09] Christopher David: boom

[01:38:10] Christopher David: boom

[01:38:11] Christopher David: boom

[01:38:12] Christopher David: boom

[01:38:13] Christopher David: boom

[01:38:14] Christopher David: boom

[01:38:15] Christopher David: boom

[01:38:16] Christopher David: boom

[01:38:17] Christopher David: boom

[01:38:18] Christopher David: boom

[01:38:19] Christopher David: boom

[01:38:20] Christopher David: boom

[01:38:21] Christopher David: boom

[01:38:22] Christopher David: boom

[01:38:23] Christopher David: boom

[01:38:24] Christopher David: boom

[01:38:25] Christopher David: boom

[01:38:26] Christopher David: boom

[01:38:27] Christopher David: boom

[01:38:28] Christopher David: boom

[01:38:29] Christopher David: boom

[01:38:30] Christopher David: boom

[01:38:31] Christopher David: boom

[01:38:32] Christopher David: boom

[01:38:33] Christopher David: boom

[01:38:34] Christopher David: boom

[01:38:35] Christopher David: boom

[01:38:36] Christopher David: boom

[01:38:37] Christopher David: boom

[01:38:38] Christopher David: boom

[01:38:39] Christopher David: boom

[01:38:40] Christopher David: boom

[01:38:41] Christopher David: boom

[01:38:42] Christopher David: boom

[01:38:43] Christopher David: boom

[01:38:44] Christopher David: boom

[01:38:45] Christopher David: boom

[01:38:46] Christopher David: boom

[01:38:47] Christopher David: boom

[01:38:48] Christopher David: boom

[01:38:49] Christopher David: boom

[01:38:50] Christopher David: boom

[01:38:51] Christopher David: boom

[01:38:52] Christopher David: boom

[01:38:53] Christopher David: boom

[01:38:54] Christopher David: boom

[01:38:55] Christopher David: boom

[01:38:56] Christopher David: boom

[01:38:57] Christopher David: boom

[01:38:58] Christopher David: boom

[01:39:01] Christopher David: boom

[01:39:02] Christopher David: boom

[01:39:03] Christopher David: boom

[01:39:04] Christopher David: boom

[01:39:05] Christopher David: boom

[01:39:06] Christopher David: boom

[01:39:07] Christopher David: boom

[01:39:08] Christopher David: boom

[01:39:09] Christopher David: boom

[01:39:10] Christopher David: boom

[01:39:11] Christopher David: boom

[01:39:12] Christopher David: boom

[01:39:13] Christopher David: boom

[01:39:14] Christopher David: boom

[01:39:15] Christopher David: boom

[01:39:16] Christopher David: boom

[01:39:17] Christopher David: boom

[01:39:18] Christopher David: boom

[01:39:19] Christopher David: boom

[01:39:20] Christopher David: boom

[01:39:21] Christopher David: boom

[01:39:22] Christopher David: boom

[01:39:23] Christopher David: boom

[01:39:24] Christopher David: boom

[01:39:25] Christopher David: boom

[01:39:26] Christopher David: boom

[01:39:27] Christopher David: boom

[01:39:28] Christopher David: boom

[01:39:30] Christopher David: boom

[01:39:33] Christopher David: boom

[01:39:34] Christopher David: boom

[01:39:35] Christopher David: boom

[01:39:36] Christopher David: boom

[01:39:37] Christopher David: boom

[01:39:38] Christopher David: boom

[01:39:39] Christopher David: boom

[01:39:40] Christopher David: boom

[01:39:41] Christopher David: boom

[01:39:42] Christopher David: boom

[01:39:43] Christopher David: boom

[01:39:44] Christopher David: boom

[01:39:45] Christopher David: boom

[01:39:46] Christopher David: boom

[01:39:47] Christopher David: boom

[01:39:48] Christopher David: boom

[01:39:49] Christopher David: boom

[01:39:50] Christopher David: boom

[01:39:51] Christopher David: boom

[01:39:52] Christopher David: boom

[01:39:53] Christopher David: boom

[01:39:54] Christopher David: boom

[01:39:55] Christopher David: boom

[01:39:56] Christopher David: boom

[01:39:57] Christopher David: boom

[01:39:58] Christopher David: boom

[01:39:59] Christopher David: boom

[01:40:00] Christopher David: boom

[01:40:01] Christopher David: boom

[01:40:02] Christopher David: boom

[01:40:03] Christopher David: boom

[01:40:04] Christopher David: boom

[01:40:05] Christopher David: boom

[01:40:06] Christopher David: boom

[01:40:07] Christopher David: boom

[01:40:08] Christopher David: boom

[01:40:09] Christopher David: boom

[01:40:10] Christopher David: boom

[01:40:11] Christopher David: boom

[01:40:12] Christopher David: boom

[01:40:13] Christopher David: boom

[01:40:14] Christopher David: boom

[01:40:15] Christopher David: boom

[01:40:16] Christopher David: boom

[01:40:17] Christopher David: boom

[01:40:18] Christopher David: boom

[01:40:19] Christopher David: boom

[01:40:20] Christopher David: boom

[01:40:21] Christopher David: boom

[01:40:22] Christopher David: boom

[01:40:23] Christopher David: boom

[01:40:24] Christopher David: boom

[01:40:25] Christopher David: boom

[01:40:26] Christopher David: boom

[01:40:27] Christopher David: boom

[01:39:59] Christopher David: So let's do some that and let's do some of this and let's do some that.

[01:40:23] Christopher David: Okay, then...

[01:40:37] Christopher David: on the...

[01:40:41] Christopher David: form, I'm guessing I need...

[01:40:53] Christopher David: Thanks now, change my fragment as needed to make that work or change the controller.

[01:41:23] Christopher David: Start returning HMX.

[01:41:31] Christopher David: I'm gonna eradicate this entire thing and paste it there.

[01:41:48] Christopher David: Let's see what that does.

[01:41:55] Christopher David: Withdraw...

[01:42:05] Christopher David: Let's withdraw...

[01:42:07] Christopher David: 7 sats.

[01:42:09] Christopher David: Withdraw 15 sats.

[01:42:21] Christopher David: No fragment called withdraw message exists.

[01:42:39] Christopher David: I don't know if that's right, but we'll try it.

[01:43:06] Christopher David: I'm doing...

[01:43:13] Christopher David: There...

[01:43:17] Christopher David: There...

[01:43:19] Christopher David: Okay.

[01:43:23] Christopher David: Alerts...

[01:43:25] Christopher David: Alerts...

[01:43:26] Christopher David: Success is telling not alert.

[01:43:31] Christopher David: Okay, let me just see if it works.

[01:43:39] Christopher David: Withdraw 17...

[01:43:43] Christopher David: HMX turn here.

[01:43:49] Christopher David: Ah...

[01:44:01] Christopher David: This should not have both an action and a...

[01:44:08] Christopher David: HX posts.

[01:44:12] Christopher David: Chat, keep it the dumb.

[01:44:27] Christopher David: I still don't know if that's gonna be right, but I'll try it.

[01:44:43] Christopher David: Try it with 20 sats.

[01:45:03] Christopher David: This is giving an HMX target error.

[01:45:10] Christopher David: Okay.

[01:45:32] Christopher David: Yeah, div ideas withdraw message.

[01:45:40] Christopher David: That's what I remember it being in the past.

[01:45:43] Christopher David: Not an nested fragment.

[01:46:02] Christopher David: I'm not sure if that's right.

[01:46:12] Christopher David: I'm not sure if that's right.

[01:46:17] Christopher David: I'm not sure if that's right.

[01:46:22] Christopher David: I'm not sure if that's right.

[01:46:32] Christopher David: I'm not sure if that's right.

[01:46:40] Christopher David: I know there's something I'm not understanding about this.

[01:46:59] Christopher David: I just haven't learned that yet.

[01:47:09] Christopher David: I've just been copypacing from GPT.

[01:47:28] Christopher David: Let's try this.

[01:47:43] Christopher David: A withdraw message.

[01:48:03] Christopher David: I'm not sure if that's right.

[01:48:31] Christopher David: I'm not sure if that's right.

[01:48:41] Christopher David: I'm not sure if that's right.

[01:49:09] Christopher David: I'm not sure if that's right.

[01:49:24] Christopher David: I'm not sure if that's right.

[01:49:40] Christopher David: Try GPT.

[01:50:10] Christopher David: Then why did you give it to me incorrect the first time?

[01:50:32] Christopher David: I'm going to bet that this is going to give me the error to not find fragment withdraw message.

[01:50:47] Christopher David: Which should then maybe be solved by wrapping our new plate opponent in that fragment helper.

[01:51:01] Christopher David: Copy paste paste.

[01:51:25] Christopher David: Let's try this.

[01:51:50] Christopher David: Now fragment I was right.

[01:52:05] Christopher David: Try again.

[01:52:44] Christopher David: I'm not sure if that's right.