Ethereum in Action Part 2: How to Build a Better Democracy in 100 Lines of Code
This is the second post in a series on how to use current Ethereum tools to build smart contracts without programming experience. Download the latest version of Ethereum wallet, Read the first part And let’s have fun!
Creating tokens is fun, but what is the value of a token that doesn’t do anything new? Now let’s create a new contract that will use the token we just created. The contract will be a democratic organization that will exist on the blockchain, and anyone holding a shared token will be able to vote on the proposal.
So let’s go back to “contract” after that “Contract Distribution” and paste DAO source code to “Solidity Source” field. Select the “Democracy” contract from the selector and then select the following parameters:
- to sheep In the field you can add the amount of Ether you will use to launch the DAO. You can always send Ethereum later, so if this is your first time, keep the amount at 0 and send the money later.
- to stock address In the field, paste the address of the token contract you just created. Pay attention to the icon and color of the small circle that appears next to the address. If it does not exactly match the contract you previously created, there is an error.
- In ~ Minimum shares for voting Select the minimum quorum of shareholders that must vote before a matter passes. Here you need to enter the smallest possible integer number of tokens, so if you created tokens with 2 decimal places, you can enter 500 here, which means that the number of votes must be at least 5% for the proposal to run. Total shares of the company.
- Discussion time: This is the minimum amount of time a proposal must be discussed and voted on before the results are tallied. If you want to generate something for testing, enter a small number like 10 minutes, or if you want to store a large amount of ether, enter a small number like 20,000. Therefore, all offers must remain open for at least two weeks.
Your contract should:
After a few seconds, you will be redirected to the dashboard where you will see your new contract being created.
You can also see a link to the new contract in the “Agreements” tab. If the contract does not exist (for example, you are adding a contract that you did not create), you will need to add it manually. To add this you will need a JSON interface, which is a text string that describes to your wallet how to interact with the contract address and code. Just select the desired name and press OK.
Clicking the New Agreement box displays the Agreement page. If you haven’t yet deposited ether into that contract, you can click deposit and put in a small amount of ether to test how this particular democracy works. If you already have funds in your contract, click the “Show Contract Information” button.
to “Read the contract” Since you only need to read information from the blockchain, you can see all the functions that can be executed in the contract for free. For example, here you can see that “sharesTokenAddress” is actually a valid address, or that the current contract has 0 offers. Let’s change that.
to “Write a contract” There is a list of all functions that attempt to do some computation that stores data on the blockchain, thus incurring an Ether cost. Selecting “newProposal” will display all options for that feature.
In “Beneficiary” add the address of the person you want to send ether to, then in “etherAmount” (must be an integer) enter the number of ether you want and finally enter text explaining why you want to do this. Leave transactionByteCode blank for now. Click Run and enter your password. After a few seconds, numProposals increases to 1 and the first proposal, the number 0, is displayed in the left column. If you add more offers, you can see all the offers and read all about them by simply entering the offer number in the “Offer” field.
Voting on proposals is also very simple. Select “Voting” from the feature selector. Enter the proposal number in the first box and check the “Yes” box if you agree to it (leave it blank to disagree). Click “.Execute“I’m sending you my vote.
After the minimum voting time has passed, you can choose: “Execute the suggestion”. “If the proposal was simply to transfer Ethereum,Transaction byte code” The field is empty. Pay attention to the screen that appears after pressing “Run” and before entering the password. If there is a warning in the “Estimated fee consumption” field, this means that the called function will not run for some reason. This means that many However, in the context of this contract, this warning will be displayed whenever an attempt is made to execute the contract before the deadline has passed, or when the user attempts to send bytecode data that is different from the contract. For security reasons, if this happens, the contract Execution ends abruptly and users who attempted to make illegal transactions lose all the ETH they sent to pay transaction fees.
If everything went smoothly, you will see your voting results within seconds. “public vote” The parameter in the first box is changed to false The proposal passed. Reflects whether the offer has been accepted. You will also see that the Ether balance in your contract is reduced and the equivalent Ether is transferred to the beneficiary of the Ether you wish to transfer.
Now take a moment and think about it. We have created an organization that exists only on the blockchain and adheres to voting based on fully digital tokens, but can move real value and have a very real impact on the world. Additionally, the organization is no longer under your control. Your organization will forever run only the exact code you used to create it. You can’t bribe it, you can’t assign it, and the same rules apply whether you’re moving 0.01 or 1,000,000 ether.
Can it get any better than this? Actually, it can be. In the next post, we will look at how to use “transactionBytecode” to allow DAOs to execute all kinds of Ethereum transactions., and may even own or create other contracts. We will also modify the token code to allow DAOs to control the amount of tokens in circulation and how they are delivered.