以太坊go语言写的 以太坊的编程语言( 二 )


智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等 。
目前除数字货币之外,真正落地的应用还不多(就像移动平台刚开始出来一样),相信1到3年内,各种杀手级会慢慢出现 。
编程语言:Solidity
智能合约的默认的编程语言是Solidity,文件扩展名以.sol结尾 。
Solidity是和JavaScript相似的语言,用它来开发合约并编译成以太坊虚拟机字节代码 。
还有长像Python的智能合约开发语言:Serpent , 不过建议大家还是使用Solidity 。
Browser-Solidity是一个浏览器的Solidity IDE, 大家可以点进去看看 , 以后我们更多文章介绍Solidity这个语言 。
运行环境:EVM
EVM(Ethereum Virtual Machine)以太坊虚拟机是以太坊中智能合约的运行环境 。
Solidity之于EVM,就像之于跟JVM的关系一样,这样大家就容易理解了 。
以太坊虚拟机是一个隔离的环境 , 在EVM内部运行的代码不能跟外部有联系 。
而EVM运行在以太坊节点上,当我们把合约部署到以太坊网络上之后,合约就可以在以太坊网络中运行了 。
合约的编译
以太坊虚拟机上运行的是合约的字节码形式,需要我们在部署之前先对合约进行编译,可以选择Browser-Solidity Web IDE或solc编译器 。
合约的部署
在以太坊上开发应用时,常常要使用到以太坊客户端(钱包) 。平时我们在开发中,一般不接触到客户端或钱包的概念 , 它是什么呢以太坊go语言写的?
以太坊客户端(钱包)
以太坊客户端,其实我们可以把它理解为一个开发者工具 , 它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能 。
EVM是由以太坊客户端提供的 。
Geth是典型的开发以太坊时使用的客户端,基于Go语言开发 。Geth提供了一个交互式命令控制台 , 通过命令控制台中包含了以太坊的各种功能(API) 。Geth的使用我们之后会有文章介绍,这里大家先有个概念 。
Geth控制台和Chrome浏览器开发者工具里的面的控制台是类似,不过是跑在终端里 。
相对于Geth , Mist则是图形化操作界面的以太坊客户端 。
如何部署
智能合约的部署是指把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址称为合约账户 。
以太坊中有两类账户:
· 外部账户
该类账户被私钥控制(由人控制),没有关联任何代码 。
· 合约账户
该类账户被它们的合约代码控制且有代码与之关联 。
和比特币使用UTXO的设计不一样 , 以太坊使用更为简单的账户概念 。
两类账户对于EVM来说是一样的 。
外部账户与合约账户的区别和关系是这样的:一个外部账户可以通过创建和用自己的私钥来对交易进行签名,来发送消息给另一个外部账户或合约账户 。
在两个外部账户之间传送消息是价值转移的过程 。但从外部账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作(比如转移代币,写入内部存储,挖出一个新代币,执行一些运算 , 创建一个新的合约等等) 。
只有当外部账户发出指令时,合同账户才会执行相应的操作 。
合约部署就是将编译好的合约字节码通过外部账号发送交易的形式部署到以太坊区块链上(由实际矿工出块之后,才真正部署成功) 。
运行
合约部署之后,当需要调用这个智能合约的方法时只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在EVM中执行了 。