区块链的安全性保证了代码不可被任何人篡改,代码正确执行(有bug的另说),执行结果不可篡改,并可以予以公开透明的展示。
合约很典型地用诸如Solidity等高级语言写成,然后编译成字节代码上传到区块链上。
ETH高级语言
合约依靠被称作ETH虚拟机(EVM)字节代码(ETH特有的二进制格式)上的区块链运行。然而,合约很典型地用诸如Solidity等高级语言写成,然后用ETH虚拟机编译器编译成字节代码上传到区块链。
编译合约
solidity合约的编译可以通过很多机制完成。
通过命令行使用solc编译器。
在geth或eth提供的javascript控制台使用web3.eth.compile.solidity(这仍然需要安装solc编译器)。
在线Solidity实时编译器。
建立solidity合约的Meteor dapp Cosmo。
Mix IDE。
ETH钱包。
注意:关于solc和编译Solidity合约代码的更多信息可在此查看。
在geth设置solidity编译器
如果你启动了geth节点,就可以查看哪个编译器可用。
这一指令会返回到显示当前哪个编译器可用的字符串。
注意:solc编译器和cpp-ethereum一起安装。或者,你可以自己创建。
如果你的solc可执行文件不在标准位置,可以用—solc标志为solc可执行文件指定一个定制路线
或者你可以通过控制台在执行期间设置这个选项:
编译一个简单合约
让我们编译一个简单的合约源:
这个合约提供了一个单一方法multiply,它和一个正整数a调用并返回到a*7。
注意:编译器通过RPC因此也能通过web3.js,对浏览器内任何通过RPC/IPC连接到geth的Ðapp可用。
下面的例子会向你展示如何通过JSON-RPC接合geth来使用编译器。
Code编译的ETH虚拟机字节代码
Info从编译器输出的额外元数据
Source源代码
Language合约语言(Solidity,Serpent,LLL
LanguageVersion合约语言版本
compilerVersion用于编译这个合约的solidity编译器版本。
abiDefinition应用的二进制界面定义
userDoc用户的NatSpec Doc。
developerDoc开发者的NatSpec Doc。
编译器输出的直接结构化(到code和info)反映了两种非常不同的部署路径。编译的ETH虚拟机代码和一个合约创建交易被发送到区块,剩下的(info)在理想状态下会存活在去中心化云上,公开验证的元数据则执行区块链上的代码。
如果你的源包含多个合约,输出会包括每个合约一个入口,对应的合约信息对象可以用作为属性名称的合约名字检索到。你可以通过检测当前的GlobalRegistrar代码来试一下:
编码智能合约
以太坊智能合约是使用以太坊的主要编码语言Solidity创建的。与其他面向对象的编程语言不同,Solidity是面向合约的。它使用的高级语言即模仿人类指令的表达方式。这种语言与JavaScript非常相似。它通过统计类型化,并支持继承、库和复杂的用户定义功能。
Solidity的智能合约
Solidity智能合约是用Solidity语言编程的智能合约,并编译为以太坊虚拟机或EVM的字节码。扎实性是在为以太坊编码时需要学习的关键语言。
什么是dApp?
dApp与常规应用程序类似,但它们在点对点网络(例如区块链)上运行。
然而,与传统应用程序不同的是,dApp无需任何人工干预即可运行,不归任何实体所有,而是将代币分发给代表所有权的用户。要连接到dApp,您只需要一个加密钱包和一个互联网连接。