DAPP/ 伪 DAPP 区块链智能合约系统开发(成熟技术)
基于区块链的智能合约不仅能发挥智能合约低成本高效率的优势,開发(刘森-180-2857-8624)而且可以避免恶意行为对合约的正常执行的干扰。将智能合约以代码化的形式写入区块链中,利用区块链技术实现数据存储、读取及执行过程可追踪透明化且不可篡改。此外利用区块链的共识算法构造的状态机系统能使智能合约高效的运行。
打开测试网络的控制台
输入以下命令:
geth--datadir"~/ethdev"--dev console 2>>geth.log
1
显示如下:
zcc ubuntu:~$geth--datadir"~/ethdev"--dev console 2>>geth.log
Welcome to the Geth JavaScript console!
instance:Geth/v1.4.18-stable/linux/go1.6.2
coinbase:0xb005804a49e73acb17d1e7645dfd0a33dde6eb0e
at block:217(Tue,01 Nov 2016 05:21:38 PDT)
datadir:/home/zcc/ethdev
modules:admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 shh:1.0 txpool:1.0 web3:1.0
>
这样我们就打开了测试网的控制台,之后的步骤如无特别说明都将在控制台中完成。
检查编译器
我们接下来的智能合约的例子是使用 solidity 语言开发的。因此,至此之前我们要确保 solidity 编译器已经正确安装了。输入以下命令检查:
>eth.getCompilers()
["Solidity"]
我们发现 solidity 的编译器已经正确安装了。如果返回值为空数组,那么输入以下命令安装:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
如果输入第一条命令的时候返回错误,请尝试重启系统。
编写智能合约
我们编写一个求解与 7 相乘结果的函数,即输入一个值 a,返回 a*7 的值。
>source="contract test{function multiply(uint a)returns(uint d){return a*7;}}"
"contract test{function multiply(uint a)returns(uint d){return a*7;}}"
1
2
编译智能合约
>contract=eth.compile.solidity(source).test
{
code:"0x606060405260388060106000396000f3606060405260e060020a6000350463c6888fa18114601c575b6002565b3460025760076004350260408051918252519081900360200190f3",
info:{
abiDefinition:[{
constant:false,
inputs:[...],
name:"multiply",
outputs:[...],
payable:false,
type:"function"
}],
compilerOptions:"--bin--abi--userdoc--devdoc--add-std--optimize-o/tmp/solc359648392",
compilerVersion:"0.4.3",
developerDoc:{
methods:{}
},
language:"Solidity",
languageVersion:"0.4.3",
source:"contract test{function multiply(uint a)returns(uint d){return a*7;}}",
userDoc:{
methods:{}
}
}
}
准备一个创建合约的账户
在以太坊上创建智能合约就是使用一个外部账户(EOA)向区块链中发送一个交易。因此,我们需要准备一个有余额并被激活的以太坊外部账户。
查看是否有可用账户:
>personal.listAccounts
[]
1
2
返回为空,说明没有可用账户。创建一个外部账户:
>personal.newAccount('123456')
"0x62b1746767522b36f6421e630fa0198151d72964"
1
2
注意:personal.newAccount()函数里的参数是账号密码,返回值是创建的新账号地址。
这个时候,我们再次使用 personal.listAccounts 命令查看可用账户:
>personal.listAccounts
["0x62b1746767522b36f6421e630fa0198151d72964"]
评论