主页 > imtoken钱包有客服吗 > 以太坊代币开发智能合约solidity之谜
以太坊代币开发智能合约solidity之谜
想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!
上一章在Geth上部署的源码如下:
编译指示可靠性 0.4.9;
合约 DemoTypes {
函数 f(uint a) 返回 (uint b)
{
uint 结果 = a * 8;
返回结果;
}
}
这时,在这个地址的左侧,复制粘贴上面的代码,然后在右侧就可以看到编译后的代码了:
p1
复制粘贴这段代码,如果web3.eth.accounts[0]也解锁了,就可以部署到以太坊私链上了。 并且可以被执行和调用。
p2
a_demotypes.f.call(100)
800
a_demotypes.f.call(125)
1000
智能合约Solidity源码分析
最简单的智能合约代码如下:
编译指示可靠性 0.4.9;
合约 DemoTypes {
函数 f(uint a) 返回 (uint b)
{
uint 结果 = a * 8;
返回结果;
}
}
下面我们尝试做一些简单的分析,介绍一些基本的Solidity知识
第一排
编译指示可靠性 0.4.9;
第一行代码是必须的,否则编译器不知道如何选择编译器,以及编译器版本。
第一行的pragma solidity中,pragma是一个关键字,表示程序启动,solidity表示智能合约是用Solidity语言编写的
0.4.9代表编译器版本,注意:从0.4.9开始,前面不能打^,0.4.8/0.4.7等版本还是需要打^
编译器版本向后兼容,
p3
第二行
合约 DemoTypes {
...
}
这是解释 Solidity 合约的引述
Solidity 中的合约类似于面向对象语言中的类。 它们在状态变量和可以修改这些变量的函数中包含持久数据。 在不同的合约(实例)上调用函数将执行 EVM 函数调用,从而切换状态变量不可访问的上下文。 (从这里引用)
中文翻译:
Solidity 中的合约与面向对象语言中的类非常相似。 有具有持久数据的变量,以及可以更改这些变量的函数。 在不同的合约实例中调用函数将在 EVM(以太坊虚拟机)中执行函数调用。
可以看出,Solidity中的智能合约与传统面向对象语言中的类非常相似,因此有构造函数、继承、变量、函数、抽象类等传统概念。
Solidity编写的智能合约编译后由EVM部署执行
Solidity语言是类JS语言,所以很多编码标准都和JS类似
第三排
函数 f(uint a) 返回 (uint b)
{
...
}
如上所述,合约包含变量和方法(函数)。 function f(uint a) returns (uint b) 表示定义了一个名为f的方法,输入变量为uint a,输出为uint b
uint表示无状态整数,即大于0的整数
uint = uint256,最大值为2的256次方,这个数足以进行大部分数学运算。
与uint相比,还有一个带负数的整数类型,即int,int=int256,取值范围从负2到正2到128次方
uint/int类型的详细介绍请参考后面Int类型的介绍。 或点击这里
函数的核心代码
函数 f(uint a) 返回 (uint b)
{
uint 结果 = a * 8;
返回结果;
}
这是一段很常见的js代码,需要注意以下两点
Solidity是一种类型语言,所以每个变量都需要定义它的类型,uint/int/string/var
Solidity 是一种静态类型语言以太坊智能合约执行时的手续费,这意味着每个变量(状态和局部)的类型都需要在编译时指定(或者至少是已知的——参见下面的类型推导)。 Solidity 提供了几种基本类型以太坊智能合约执行时的手续费,它们可以组合起来形成复杂类型。 从这里引用
关于编码风格 uint result = a * 8;,solidity 鼓励在运算符中留出空间。
赋值或其他运算符周围有一个以上的空格以与此处引用的内容对齐
是的:
x = 1;
y = 2;
long_variable = 3;
通过上面的代码,我们了解了一些关于智能合约的基础知识,下一篇文章将开始讲解Browser-solidity右侧的玄机
Browser-solidity是官方的基于浏览器的合约编译器,非常好用,构建版本会紧跟最新的Solidity构建版本。 但是由于网络原因和GFW的存在,可能会有一部分人访问很慢,影响开发效率。 下面介绍如何在本地部署 Browser-solidity
本地部署 Browser-solidity 方式
第一步:下载源码到本地并解压
p4
第二步:进入下载的文件夹,执行以下命令(基于源码构建)
npm install # 获取依赖
npm run build # 将应用程序构建到 build/app.js
第三步:启动npm服务器
npm 运行服务
p5
本地开启效果如下: 然后就可以随意编写自己的智能合约了。
p6
Browser-solidity详解
这里使用的Browser-solidity来自官网。 如果打不开或者速度太慢,请参考上面本地的搭建方法。
Browser-solidity右侧的详细分析请参考下图:
p7
1、当前的solidity版本,如上图所示,是0.4.9,默认是最新的release版本。
2.点击下拉框可以选择不同的版本,包括还不成熟的最新build版本,或者之前的版本。个人强烈建议大家尽量选择release版本,如下图
p8
3. 点击create,会在内存中创建一个智能合约的实例,即下面的web3 deploy代码会部署在虚拟内存中。
p9
4. 字节码是源代码的编译产物,这也是最终要放在区块链上的标识符。 网络上的任何人都可以阅读此字节码。
5.接口是智能合约除了字节码之外的另一个核心,它是智能合约与外界通信的核心
6、web3.deploy代码是一段部署代码,可以直接部署在geth网络上。 在上一章中,我们已经尝试过了。 只需要复制粘贴这段代码,就可以直接部署在一个区块链私有链上 Deploy 上调用他。
7. from表示合约由该账户产生,该账户产生的gas需要由该账户承担。 默认是eth.accounts[0],因为所有挖矿得到的以太币也默认存入这个账户。 账户区。 data:表示字节码 gas:表示为部署合约准备的最大gas量。 当然,在实践中可能无法使用这么多的气体。 具体用量以实际使用为准。 这里我们只设置一个最大数量。
8、最后一段是典型的javascript异步调用方法,将上面new方法的结果传递给next方法函数(e,contract),如果挖矿成功,在next方法中处理,显示结果。
至此,我们已经详细分析了最简单的智能合约,以及以太坊的一些底层技术细节。