bsc币安链dapp智能合约系统开发及功能分析

2022-08-14 20:06:37 浏览数 (1)

  Web 3.0的纽带作用:

  与DAPP浏览器相辅相成的是其底层网络架构Web 3.0,这是和信息互联网时代传统浏览器基于的Web 2.0完全不同的体系架构。区块链技术,尤其是ETH的出现使Web 3.0成为基于区块链进行价值传递的基础网络。

  从技术架构来看,Web 3.0的体系架构更为复杂,它在传统信息互联网的基础上,增加了价值(Token)的传递。

  合约是代码(它的功能)和数据(它的状态)的集合,存在于ETH区块链的特定地址。合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作ETH虚拟机(EVM)字节代码(ETH特有的二进制格式)上的区块链运行。

  合约很典型地用诸如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代码来试一下:

  创建和部署合约

  开始这一章节之前,确保你有解锁的账户和一些资金。你现在会在区块链上创建一个合约,方法是用上一章节的ETH虚拟机代码作为数据给空地址发送交易。

  注意:用在线Solidity实时编译器或Mix IDE程序会更容易完成。

  所有的二进制数据都以十六进制的格式序列化。十六进制字符串总会有一个十六进制前缀0x。

  注意:注意arg1,arg2,…是合约构造函数参数,以备它要接受参数。如果合约不需要构造函数参数,就可以忽略这些参数。

0 人点赞