Introducing Steem Multiple Authority Manager

in #utopian-io6 years ago (edited)

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/

Sort:  

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!

Hey @reazuliqbal,

I'd really like the chance to chat with you about this site you have. It is a great site and I look forward to seeing your updates on it.

I have an offer for you. The HoboDAO is a concept of creating a federation of multisig accounts formed like DAOs for the creation of a decentralized curation community empowered by its own token.

Your site helps non-techies navigate multisig operations. This is perfect for the HoboDAO project. We're a small project, but we're really picking up steam. We now have 17,500 SP delegations and we're gaining delegations by the day.

The Hobo token is selling at low volume but there is daily liquidity on the SE market and we're not even running our curation program yet. We have many delegators delegating to earn tokens on a monthly basis and several people have enrolled in our Ambassador program to translate our announcements to local language communities.

I would very much like to coordinate with you to see if you would agree to support our project by managing your own Steem Multisignature Manager site for our community.

If you agreed to join our discord server and act as tech support to our members when they have difficulty using your site, we would reward you in 100,000 Hobo tokens per month.

This is a negotiable point, but if you would make your site available via IPFS it is something our project very much wants for decentralization.

Please accept an invitation to join the HoboDAO project as a member in this decentralized community and join our discord server here: https://discord.gg/TFzSuYE

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.

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...

Hello @reazuliqbal,

I think this site is great. We are working on something we are calling a Decentralized Curation Community or DCC. The HoboDCC is trying to utilize multisig account capabilities to create an entire decentralized organization.

We will be using a token created on Steem Engine called the Hobo token or HBO, and our goal is to build a decentralized curation community focused on supporting quality independent journalism on Steem with curation.

You can learn more about this at the @hobo.media blog.

First, I would like to let you know that we think your site is excellent and there is one thing we wish was finished: broadcasting votes. Currently, this feature is missing. When you have completed it please let me know and you will be sent 500,000 Hobo tokens.

Currently, our token is not worth much, but we expect its price to be around 0.066 STEEM per token or even more. So, that could potentially be around 33,000 STEEM in value or possibly more.

If you were interested in talking more about our project and getting more involved, I would love to discuss a possibility of giving you 3,000,000 Hobo tokens if you were willing to make enough customization to your site to support our goals with our community.

Thanks for your time. :)

Thanks for explaining what you are trying to do with it. I am bit busy now. I'll try to add multi-sig voting soon.