Steem Multisig Wizard: Dev Blog 2: Creating a multisig transaction
Welcome to another dev blog!
Today we're going to look at how a multisig transaction can be created with our in-development Steem Multisig Wizard tool, once a Steem account has been converted to a multisig account.
Creating a Multisig Transaction
Any of the Steemians who are signatories to a given multisig account may propose a new transaction.
Last time, we turned the account @multisigtest01 multisig account, with @freelance.monkey, @pennsif and @rexthetech as signatories.
As any of those users, we can propose a transaction which, in order to complete, must be approved by at least one other signatory (since, in this case, we created a "2 of 3" multisig account.)
Let's head to the test site, and choose Create A Transaction:
On the first screen, we simply specify the multisig account we want to send from, the recipient account to send to, and the amount to send (in either STEEM or SBD).
Various validation checks are done, to ensure the sending account is actually a multisig account, and to make sure that it has sufficient balance to send the requested amount.
Assuming validation passes, the multisig wizard checks the signatories for the multisig account, and we're invited to select which of them we are:
Choosing @rexthetech prompts me to paste my account's Private Active Key:
Let's take a peek at what gets sent to the Multisig Wizard server when I click Create.
As you can see, my Private Active Key never leaves my browser. It's only used to sign the partial multisig transaction, so that the other signatories can come and add their signatures too.
In addition to the actual multisig partial transaction, an "authentication transaction" is also signed and passed to the server.
This is a custom JSON transaction, with a few random bytes as the JSON payload. This transaction is not broadcast to the network, and only used to validate that the signature which was used to sign the multisig transaction is the signature for the signing signatory (rather than a different account).
There's no fund transfer attack vector by signing with the wrong signature (the resulting transaction would not broadcast), but this authentication prevents a mischievous party spamming the system with fake multisig transaction requests.
After clicking create, the Wizard shows the following:
If the signatory had sufficient signing weight to meet the multisig account's weight threshold all by themselves, the transaction would have been immediately broadcast.
However, since @multisigtest01 is a "2 of 3" multisig account, we now need @freelance.monkey or @pennsif to come along and sign it, so the partial transaction is stored in the Multisig Wizard's database.
After a multisig transaction has been created, there is a window of only 1 hour in which it must be fully signed, or it will expire and no longer be accepted by the blockchain. Note that this is a Steem blockchain limitation, rather than an arbitrary time window we have picked ourselves.
As soon as the transaction is either signed and broadcast, or expires, it is deleted from the Multisig Wizard's database.
There is no other data storage at all, no user tracking, and no logging (beyond, of course, the resulting on-chain transaction in the event of a fully signed multisig transaction).
Apart from a single final transaction, created only when a multisig transaction is fully signed and broadcast, the only on-chain activity the Wizard performs is its notification system.
Notification System
Because we only have 1 hour in which to complete a proposed transaction, it's important to quickly notify the other signatories who could contribute their signatures to complete the transaction.
We don't want users to have to go and manually get in touch with their co-signatories to ask them to sign the transaction, so we've included a on-chain notification system.
The Multisig Wizard has its own Steem account just so that it can make notification posts. It's currently running as @multisigtest03, but this will change when the tool goes live publically.
Here we can see its notification post for the transaction we just created.
Another post will be made to update the partial transaction's status when additional signatories sign it. No notification is made for completed or expired transactions.
To prevent the Wizard's own Steem account from exceeding the 1 post per 5 minutes limitation (or running out of RC), a digest format is used.
Every 6 minutes, any newly created transactions or updated transactions will be combined into a single post.
Notification Query
The idea of the notification system is that signatories will see the notification in their Mentions. However, this isn't happening at the moment; for some reason, @freelance.monkey, @pennsif and myself didn't see the above post in our Mentions.
Does anyone know why this is? Does a Steem account have to have a minimum reputation score before its posts will appear in a user's Mentions?
Not long now!
The next dev blog will hopefully be the last before we launch! In it, we'll take a quick look at the final workflow, that of a co-signatory returning to the site to sign a proposed transaction.
Support our Project
If you like what we're doing, please do drop a witness vote for @pennsif.witness. YOUR support makes this development possible, and means we can continue to build more cool stuff :)
Thank you, friend!
I'm @steem.history, who is steem witness.
Thank you for witnessvoting for me.
please click it!
(Go to https://steemit.com/~witnesses and type fbslo at the bottom of the page)
The weight is reduced because of the lack of Voting Power. If you vote for me as a witness, you can get my little vote.
Upvoted! Thank you for supporting witness @jswit.
!thumbup
Hello @rexthetech! You are good!
command: !thumbsup is powered by witness @justyy and his contributions are: https://steemyy.com
More commands are coming!
This is a welcome development..., waiting for the last stage.
Success..!