区块链的安全性保证了代码不可被任何人篡改,代码正确执行(有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必须具有三个特征:
1)应用程序必须是开源的,大部分由Dapp所发行的代币自主运行而不是由某个实体控制,所有的数据和记录都必须加密保存在公开且去中心化的区块链上。
2)应用必须通过一个标准算法或者一组标准来生成代币,在操作开始就可能分配一部分或者全部代币。这些代币必须根据应用的需要来使用,任何提供贡献的用户都应该获得应用支付的代币奖励。
3)应用能够根据市场反馈来改进并且调整自己的协议,但所有的更改必须由它的用户多数一致同意。但总体而言,每个区块链项目对于去中心化应用组成条件的确切技术看法会有一些不同。
What is dApp?
DApps are similar to regular applications,but they run on point-to-point networks(such as blockchains).
However,unlike traditional applications,dApps can run without any human intervention and are not owned by any entity,but distribute tokens to users representing ownership.To connect to the dApp,you only need an encrypted wallet and an Internet connection