美文网首页Nervos Fans
以太坊智能合约开发的基础知识

以太坊智能合约开发的基础知识

作者: 526ba0512193 | 来源:发表于2018-05-15 15:42 被阅读11次

    以太坊上的应用叫 dapp,decentralized app,即去中心化的应用程序,是基于智能合约的应用。

    如果把区块链理解为一个不可篡改的数据库,智能合约就可以理解为和数据库打交道的程序,那么dapp就是和数据打交道的程序加上一个友好的用户界面和其他的各自的需求的应用。

    所以结论就是,dapp 和我们常见互联网的app 有什么区别呢?简单说就是 app 加上智能合约。去中心化的 app。

    智能合约是什么呢?智能合约也是一段代码,以太坊上的智能合约就是运行在以太坊分布式平台上的一段代码。

    以太坊平台让这些代码具有了不可篡改、分布式和可自校验状态等特点。智能合约运行过程中状态的存储不可变,每个人都可以开一个自己的节点重放整个区块链,结果相同。共识就是让所有节点状态一致。我们用的收发eth的钱包,就是我们看到的app,背后是个智能合约。 imtoken 可以理解为一个物联网的app 加上以太坊的智能合约,再加上其他不断扩展的其他功能。

    智能合约如何使用?就是把合约的代码发布到区块链上,并使用一个唯一的地址,这个地址称为合约账户。

    以太坊有两种账户:一种叫外部账户,就是我们常见收发代币eth用的,该类账户用私钥控制,没有关联代码。一种是合约账户,就是智能合约用的账户,这类账户被他们的合约代码控制并且有代码与之关联。

    外部账户可以通过创建和用自己的私钥对交易签名,来发送消息给其他外部账户或合约账户。但是两个外部账户之间的传送消息就是传送代币eth。

    从外部账户到合约账户的消息会激活合约账户里的代码,就是激活智能合约,允许智能合约执行各种动作。

    智能合约执行的常见动作就是:转移代币(赌博等分配代币)、创造新币(满天飞的erc20等)、执行一些运算、创建一个新的智能合约等等。

    只有外部账户发布指令时,对应的合约账户里的智能合约才会执行对应的操作。

    智能合约的使用,就是将编译好的智能合约的代码通过外部账号发送交易的形式部署到以太坊区块链上,矿工出块成功后,就部署成功。智能合约的常见编程语言是 solidity,文件扩展名以 .sol结尾。 solidity 编程语言和javascript 很相似,用它来开发合约并编译成以太坊虚拟机使用的机器代码。

    除了solidity语言,还有viper、lll和bamboo,建议用solidity。以太坊虚拟机evm, ethereum virtual machine,是以太坊的智能合约运行的环境。 evm 运行在以太坊节点上,当智能合约部署到以太坊网络上以后,智能合约就可以在以太坊网络中运行了。 evm是一个隔离的环境,外部无法接触到在evm中运行的代码。

    说了这么多,就是智能合约这么重要,运行在整个分布式网络中,智能合约每执行一次就要所有的节点执行一摸一样的计算,才能达成共识。容错性强,但是效率低,消耗资源和时间。这么多节点计算存储状态要消耗大量的费用。

    为了防止无效的运算,恶意运算等,也要矿工有收益等,以太坊要求所有的底层操作都要消耗一定的gas。这里的gas ,不是币安上的gas喔。

    提醒一下,币安上的gas 是neo,小蚁的计算费,就是在neo上运算需要消耗gas, neo会生产gas。

    以太坊上运行需要的费用= gas价格(就是多少数量的eth)*gas数量。

    以太坊上的gas,只是一个名字,燃料,代表的是执行所需要花费的单位,智能合约越复杂,就是计算的步骤越多,类型越复杂,占用的内存越多,运行需要的gas就越多。执行智能合约。转代币eth ,都需要消耗费用。

    Gas

    的目的是限制执行交易所需的工作量,同时支付费用。智能合约执行时,会按照规则,一边执行一边消耗gas,无论执行到什么阶段,只要gas耗尽,将会触发异常,以前调用帧所做的所有状态修改都将会被回滚,如果执行还有gas剩余的都返还给发送账户。

    所以,执行智能合约,需要一个有eth代币的外部账户,来发起一个交易来部署或者执行一个智能合约,运行时,矿工需要收取相应的费用。看到这里就会发现,执行智能合约代价很高,而且部署到以太坊网络上的智能合约永不可变。如果智能合约有bug,无法下架,只能重新部署修改后的版本。

    直接部署的方法风险大,代价高,有没有办法解决呢?以太坊提供了几种办法。

    1)以太坊官网测试网络 testnet,用这个网络测试智能合约,会获得免费的运行代币,不好的是需要花长时间初始化节点。2)使用私有链,就是创建自己的以太坊私有测试网络,通常称为私有链,可以使用来做为一个测试环境来开发、调试和测试智能合约。网络运行代币想挖多少挖多少,也不用同步正式网络的整个数据。3)使用开发者网络模式,相比私有链,开发者网络不用挖币,会自动分配一个有大量余额的开发者账户随便用。4)使用模拟环境, ganache cli里面有模拟环境,以前叫testrpc,是在本地使用内存模拟的一个以太坊环境,对于开发调试来说更快捷。模拟环境会在启动时自动创建10个存有资金的测试账户。测试通过后,再部署就安全多了。

    在以太坊里还有一个概念很有名,就是dao,去中心化组织。

    dao 

    就是一个组织一群人,通过使用代码来保证公开透明的规则,最终强制执行。这里面没有法律等介入。目前常见的就是在某件事上投票,决定非否投资等。决策,管理,投票的结果等将不可改变的存储在区块链上。

    这么厉害的功能,由于有漏洞,以太坊的dao被黑客攻击,导致后来分叉出来了 etc+eth,两条链,两种代币。

    相关文章

      网友评论

        本文标题:以太坊智能合约开发的基础知识

        本文链接:https://www.haomeiwen.com/subject/tixydftx.html