计划要写四篇关于以太坊开发的文章,这是第二篇。
关于投票的这个智能合约的代码,来源于网络,代码仅仅25行,也很容易理解,candidateList的定义主要是为了校验候选人是否存在而设计的数据结构,对于投票并没有特别实际的作用,合约并不是这篇文章要讲的重点,重点我们来看看怎么通过两种方式来执行这个合约。
参照上一篇文章的图表,我们这次采用Ganache模拟以太坊节点,启动Gnanache之后,默认开启8545这个端口,默认会生成10个Account,而且每一个都默认带有ether。
合约的编译,这次我们采用solc,一个npm的实现,使用web3部署合约,ejs主要是为了测试如何通过网页上的操作来执行智能合约,
solc编译后,就可以通过web3进行deploy了,我们可以看到deploy的形式和我们通过Remix在线执行的方式差不多,其中gas是可以通过web3进行计算的,
针对gas,多说一句,以太坊设计了很好的刺激机制,应用中,你在进行部署、或者执行合约接口的时候,都需要花费gas,互联网都是免费的,以太坊却为什么要设计成这种方式?这可能互联网未来的发展趋势,后面我会写一篇文章,分析一下为什么互联网不应该是「免费」的。
接下来的代码,用两种方式测试,第一种方式通过node用cli的方式进行交互,我们初始化了一组候选人,后面就可以根据提示完成投票,也就是调用合约中的两个接口,代码略,输出的结果如下,
第二种方式,我们把与合约的交互交给网页来操作,代码如下,
将一些变量渲染到前端页面,然后启动http server,把上面在cli中与合约交互的类似代码在前端通过web3来执行,结合jQuery和bootstrap完成页面工作,
我们可以看到,Dapp的开发,前端部分,和传统的App开发方式没有任何差别,只是多了web3的rpc通讯机制。
领取专属 10元无门槛券
私享最新 技术干货