以太坊让世人第一次知道了智能合约的概念,为了支持智能合约,以太坊必须把自己变的特别像一台计算机,那么全球的节点连接到一起,怎么能像一个计算机呢?那就是使用 EVM(以太坊虚拟机)技术,让每个节点的链表上可以运行智能合约的指令。全球的以太坊节点连接起来,也就形成了全球计算机。
对有一定编程经验的人来说,Solidity 开发绝对不是什么难事。Solidity 确实极容易上手,但是确实有很多细节需要注意的。一个智能合约是怎样部署到以太坊网络的呢?
以太坊智能合约可以通过编辑器经过rpc远程调用(默认用8545端口)发布到geth节点上,最终在以太坊网络中运行。
众所周知,我们在以太坊上执行智能合约是需要消耗 gas 的,也就是说没有以太是不能运行的,这对很多童鞋来说表示难以理解。其实这涉及到经济系统的利益问题,我们执行了一个指令,整个网络都要同步数据,而这些指令是需要矿工进行打包交易的,如果矿工的利益不能保证,最后也就将导致整个网络无人维护。
那么问题又来了,矿工有利益,开发者的收益如何实现呢?这就要具体问题具体分析,有些需求是为了保证数据存储在区块链上永不丢失,这个是保存类价值。对于开发者来说,开发出来爆款的 DApp 就是最大的收益,参考之前火爆的加密猫。
TPS 较低也是阻碍区块链发展的一大原因,这是区块链的架构决定,达成共识方面本就需要时间。作为应用的开发者来说,应该让用户有更好的体验。对于一个未确认的交易,我们可以采用监控事件的方式进行处理,这就是一个异步模式,这个事件其实类似于我们平常写程序里经常使用的 print。
合约代码如下:
js代码中添加事件的处理(map_event.js)
运行时启动geth需要注意参数:
geth --datadir ./data --networkid 15 --port 30303 --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpcvhosts "*" --rpcapi 'db,net,eth,web3,personal' --rpccorsdomain "*" --ws --wsaddr "localhost" --wsport "8546" --wsorigins "*" --nat "any" --nodiscover --dev --dev.period 1 console 2> 1.log
运行效果如下: