Introducing Steem Multiple Authority ManagersteemCreated with Sketch.

in utopian-io •  4 months ago

1_home.png

Steem Multiple Authority Manager is a web interface for adding multiple signatory authority to a Steem account, creating, signing, and broadcasting transactions from that account.

Web

https://codebull.github.io/SteemMultisig/

Features

  • Changing a Steem account's role(s)' authority to multi-signatory authority
  • Creating a signed transaction. Currently - transfer, transfer_to_vesting, withdraw_vesting, delegate_vesting_shares, and account_witness_vote.
  • Signing already created transaction.
  • Broadcasting the signed transaction.

How does it work?

When a user visits the webpage it checks if the user had logged in before if not ask them to login. Then it saves logged-in user's data to the browser's localStorage for auto-filling forms and account update data.

The logged-in user now can generate multiple authority for posting, active, or owner role of his/her account.

If he/she has multiple authority already setup, can head over to transaction generation page and generate a signed transaction with a private key. The signed transaction has 1 hour expiration time.

The signed transaction can now be sent to other keys (authority) holders for signing. They can use sign transaction page to sign the transaction with their key. After inputting JSON transaction data the interface will show who can sign and who already signed.

After signed by all required parties, the signed transaction can be broadcasted from broadcast transaction page to the blockchain.

How to use?

Step 1: Login

Log in with your Steem username. After successful login, you can use all the pages. Login is required to save your Steem username, memo key to be used in account updates and auto-filling forms.

Step 2: Generating Multiple Authority

You now can make your steem account a multiple signatory accounts for all roles. Select your desired Authority role from the dropdown, add the public key(s) and/or account(s) and desired weight for the key(s) and account(s). If you need to generate key(s), use the form at the bottom of the page.

3_adding-multi-auth.png

Enter weight threshold for broadcasting any transaction. Weight threshold is the minimum required total weight of the keys that signed a transaction before it can be broadcasted to the blockchain. In the example, weight threshold is set at 100, so before broadcasting a transaction from @projectaccount that requires active authority, all key that signed the transaction should have a total weight of 100 or more.

So, in the example, the private key of public key 1 (weight 50) and 2 (weight 30) is always required, and then @projectaccount can use the private key of any of the key 3 or 4, or account @reazuliqbal or @bdcommunity to sign and broadcast a successful transaction.

Here is our example transaction on the blockchain.

Step 3: Generating Transaction

Generate a transaction for supported operation (more will come) from generate transaction page with your private key.

Select an operation from the dropdown and fill out the form, enter your private key and click Generate. Copy the generated JSON form of the transaction and send it to other parties for signing.

4_generating-transaction.png

In the example, @projectaccount is sending 1 STEEM to @reazuliqbal.

Step 4: Signing Transaction

If you are one of the other parties, you should use the transaction signing page to sign the transaction.

5_signing-transaction.png

Paste the JSON transaction data. You'll see who already signed and who can sign the transaction. Enter your private key and click sign. Copy the signed transaction.

If the weight threshold is met, you can broadcast the transaction or send it to other parties for signing.

Step 5: Broadcasting Transaction

After signing by all the parties or reaching to weight threshold, you can broadcast the transaction from broadcast transaction page.

6_broadcast.png

Paste the signed transaction and click broadcast. If it is successful you'll see a success message else check browser console for errors.

Here is our example transaction on the blockchain.

Alternatives

Technologies

The dSteem library is used to communicate with the Steem blockchain, jQuery for DOM manipulation, Bootstrap 4 for styling, and browserify for compiling for the browser.

Steem.js's auth module was used to sign changing to multiple authority transactions. I was having a problem with broadcasting the multiple authority transactions signed by dSteem, but after trying Steem.js it worked. I was not able to pinpoint where the problem was but it was in the signature.

TODO

  • Support for more operations.
  • Adding reset authorities features.
  • Adding summary description for operations from JSON.

Contributing

Feel free to fork the repo and submit a pull request. All sources are included in the /src folder.

To compile:

npm run build

To watch your change(s):

npm run watch

Repository

https://github.com/CodeBull/SteemMultisig

Pull Request

https://github.com/CodeBull/SteemMultisig/pull/1
https://github.com/CodeBull/SteemMultisig/pull/2

GitHub Account

https://github.com/CodeBull/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Thank you for your contribution! Great work.

  1. You might want to check the input using steem.utils.validateAccountName currently, any invalid account names including the prefix @ will cause a TypeError: Cannot read property 'name' of undefined at f.database.getAccounts.then (app.js:1)error in the console - which is slient to users.
  2. In fact, would it be better if your login requires actual validation via steemconnect so that users won't have to type in WIF everytime? Currently, it looks to me the login function is a bit fake... Look, I wished I can do this: LOL
  3. I would love to see a few unit tests in such kind of project - and it will be great if you can use travis-ci.com to set up a build system to boost some confidence.
  4. It might be useful to consider using some front-end frameworks such as Vue or React, currently I can see you have some code mixing the presentation and logics using jQuery.

Great work!

Your contribution has been evaluated according to Utopian policies and guidelines, as well as a predefined set of questions pertaining to the category.

To view those questions and the relevant answers related to your post, click here.


Need help? Chat with us on Discord.

[utopian-moderator]

·

The purpose of login function is to save the username and memo key to localStorage so that I can use it while sending account update data and auto-filling forms. But I should have done the username verification. Thank you for pointing it out.

I think SteemConnect login cannot help with the functionalities because we are changing authorities but it might be a way to verify if the user owns the username.

I am planning to learn unit testing and going to use it in future projects.

Thank you so much for the detailed review. :)

·

Thank you for your review, @justyy! Keep up the good work!

Hi @reazuliqbal!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your post is eligible for our upvote, thanks to our collaboration with @utopian-io!
Feel free to join our @steem-ua Discord server

Another great contribution to steem blockchain. Keep up the good work 👌

Posted using Partiko Android

Great job, @reazuliqbal!

I've added you to the @steemtank list. Keep up the good work!

·

Thank you so much. :)

Very good, excellent work!
I had the same problem using dsteem to add multiple authorities :/
My solution was to generate different keys until it worked.

I would be good to figure out the principal problem behind.

Thanks for referencing my work.

·

I tried several things. It only worked when I set 2 keys with same weight e.g 50 for each and weight threshold is 100.

I do not have the technical capability to diagnose/fix the problem, but it was in the signature of the transaction. dSteem and Steem.js both produced different signature for the same operation and dsteem's signature had a Buffer element in it (not sure what that was for).

·
·

I also tried several things, and I used client.database.verifyAuthority to verify before broadcasting. When it worked for 3 keys I started to add account_auths. I remember that just changing one name it failed, and I had to try many names.

Hi @reazuliqbal, your post has been upvoted by @bdcommunity and the trail!

If you want to support us, please consider following our curation trail on Steemauto.com or delegating STEEM POWER to us.

20 SP50 SP100 SP200 SP300 SP500 SP1000 SP

JOIN US ON

Hey, @reazuliqbal!

Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!

Get higher incentives and support Utopian.io!
Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via SteemPlus or Steeditor).

Want to chat? Join us on Discord https://discord.gg/h52nFrV.

Vote for Utopian Witness!

Bro please help

·

How can I help you?

·
·

Vai ami ahakon o kaj ta buji nai...

·
·
·