主页 > imtoken钱包有客服吗 > 以太坊代币开发智能合约solidity之谜

以太坊代币开发智能合约solidity之谜

imtoken钱包有客服吗 2023-04-28 07:31:22

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!

上一章在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方法中处理,显示结果。

至此,我们已经详细分析了最简单的智能合约,以及以太坊的一些底层技术细节。