主页 > 苹果商城可以直接下载imtoken吗 > 部署并运行以太坊智能合约(图形界面)

部署并运行以太坊智能合约(图形界面)

网上部署智能合约的文章很多,但是都有一个共同的特点,就是都是使用命令行来部署。 首先搭建SOLC编译环境,然后部署Geth或Eth节点,然后一步步生成钱包、ABI、合约。 按地址部署对初学者来说晦涩难懂且容易失败。 本文主要介绍如何在图形化界面上一键部署和调用智能合约。 其他区块链知识可以参考我的其他文章:

一、智能合约与DAPP概述

一、智能合约的基本概念

智能合约是可以部署在以太坊网络上运行的代码和数据的集合。 如果打个比方,智能合约更像是一个JAVA程序。 JAVA程序通过JAVA虚拟机(JVM)将代码解释成字节并执行。 以太坊智能合约通过以太坊虚拟机(EVM)被解释成字节码。 如果你学过汇编,你会发现编译后的字节码和汇编非常相似。 同时,智能合约有自己的账户,可以自动执行一些由时间或事件驱动的功能,比如相互之间传递信息,修改账户信息等区块链状态等。以太坊最大的特点是智能合约是图灵完备的。 一般来说,它可以完全模拟计算机能做的一切。 众所周知的比特币其实可以执行一些简单的脚本,但它并不是图灵完备的。 例如,循环指令比特币无法执行。

以太坊虚拟机 (EVM)

以太坊虚拟机 (EVM) 是以太坊中智能合约的运行时环境。 它不仅封装在沙箱中,而且实际上它是完全隔离运行的,这意味着在 EVM 内部运行的代码无法触及网络、文件系统或其他进程,甚至智能合约之间也只有有限的调用。

2. DAPP的基本概念

初学者常将智能合约与DAPP混淆,以太坊社区将基于智能合约的应用称为去中心化应用(Decentralized App)。 DApp 的目标是让你的智能合约有一个友好的界面,加上一些额外的用户友好的东西。 一个典型的 DApp 示例由一个 html 界面、web3 运行时、一段 JS 代码和一段部署在区块链上的智能合约组成。 与一般 CS 架构网站不同,DApps 不能运行在普通服务器上。 DApp 必须在可以与以太坊节点交互的服务器上运行,或者在任何以太坊节点上运行。 DApp通过向区块链网络提交交易与相应的智能合约进行交互,从区块链网络中读取重要数据,而不是从中心化的数据库如(MYSQL数据库)中读取。 与典型的BS架构用户登录系统相比,以太坊用户以十六进制地址表示,所有用户数据和其他数据都存储在本地,这与目前的Web应用架构有很大不同。

3. 智能合约高级语言

用户不可能直接编写以太坊虚拟机(EVM)的字节码,所以以太坊提供了几种高级语言来编写智能合约。

Solidity:类似于JavaScript,是以太坊推荐的旗舰语言,也是最流行的智能合约语言。 具体使用请参考Solidity文档,地址:

Serpent:类似Python风格,文档地址:

LLL:类似Lisp风格,已经终止。

可以根据不同的习惯选择不同的高级语言,目前最流行的是Solidity。

2. 在以太坊私有链上部署第一个智能合约

本文中的智能合约采用了以太坊官方的示例合约,其功能是在区块链上存储一个数字,并能够读取出来。 代码如下:

以太坊智能合约编写_以太坊合约交易技巧_以太坊合约地址

合同简单存储{

uint 存储数据;

函数集(uint x){

存储数据 = x;

}

函数 get() 常量返回 (uintretVal) {

返回存储数据;

}

}

即使没学过Solidity语言,也能大致看出合约的set函数在X变量中存入一个数字,get函数从X变量中读取数字。 合约部署如下:

1.启动私有链

启动以太坊私链Geth和Ethereum-Wallet图形界面(本文使用Geth 1.41版本,Ethereum-Wallet 0.8.1版本)。 如果不知道如何启动以太坊合约交易技巧,请参考我之前的文章《区块链开发(一)基于以太坊搭建私链环境》地址:启动后界面如下,Ethereum-Wallet会显示红色PRIVTE-NET 标记。

以太坊合约地址_以太坊智能合约编写_以太坊合约交易技巧

2.创建两个钱包

以太坊合约地址_以太坊合约交易技巧_以太坊智能合约编写

点击“ADD ACCOUNT”按钮添加钱包,程序会弹出对话框,提示输入两次密码。 输入密码后,账户创建成功。 创建其他账户,同样的操作,从上面的截图可以看出,一共有三个账户,一个是MAIN ACCOUNT,一个是ACCOUNT2,一个是ACCOUNT3

3.挖矿获得一些以太币

创建账户后,没有以太币,需要在私链上挖矿,切换到Geth界面,进入

矿工开始(1)

miner命令括号中的1表示使用一个线程进行挖矿。 如果不配置,CPU会全速运行,影响电脑的使用。

以太坊智能合约编写_以太坊合约交易技巧_以太坊合约地址

运行一段时间后,主账户会得到大量的以太币。 这时,屏幕会快速刷新。 别着急,输入命令miner.stop()停止挖矿。

4. 将以太币从一个钱包转移到另一个钱包

首先点击ACCOUNT2账户进入账户详情界面,点击右侧的“COPY address”复制ACCOUNT2的地址,系统会提示你现在处于测试网络中,不要向该账户转真实以太币.

以太坊合约交易技巧_以太坊智能合约编写_以太坊合约地址

点击钱包中的“SEND”按钮,将一定数量的ETH从MAINACCOUNT转入ACCOUNT2,可以看到执行这笔交易的费用为0.00042 ETH。

以太坊智能合约编写_以太坊合约地址_以太坊合约交易技巧

以太坊合约交易技巧_以太坊智能合约编写_以太坊合约地址

点击发送后,会提示输入密码,但是还没有发送成功。 根据区块链的交易规则,需要矿工确认,每笔交易需要确认12个区块,一个区块需要16秒生成。 切换到Geth程序,输入挖矿命令,直到ACCOUNT2上显示100 ETH,然后停止挖矿。

以太坊智能合约编写_以太坊合约交易技巧_以太坊合约地址

5.部署智能合约

点击“CONTRACTS”进入智能合约管理界面,点击“DEPOLY NEW CONTRACT”开始部署智能合约,选择部署智能合约的账户,输入智能合约的代码,如下图

以太坊合约地址_以太坊智能合约编写_以太坊合约交易技巧

进入后点击“DEPLOY”,系统会提示输入账户密码,因为部署智能合约需要付费。

以太坊智能合约编写_以太坊合约地址_以太坊合约交易技巧

这个时候部署的智能合约是看不到的。 切换到Geth界面进行挖矿。 12个区块后,智能合约将被确认并显示。

3.运行智能合约

1. 在此节点上运行智能合约

点击“CONTRACTS”进入智能合约界面,可以看到刚刚部署的智能合约“SimpleStorage”,点击进入智能合约,进入详情界面,有智能合约写入区和读取区,首先开始Geth挖矿,然后在书写区选择对应的智能合约函数SET,在下方的数值输入框中输入你要设置的数值,运行一段时间后,可以看到智能合约函数中Retval的返回值发生了变化GET 在阅读区。

其他智能合约的操作也是一样的,无非就是功能多一些,输入多一些。

以太坊合约地址_以太坊智能合约编写_以太坊合约交易技巧

2. 在其他节点上运行智能合约

此时智能合约只能自己看到,其他人看不到和运行。 如果其他人要运行你部署的智能合约,他们需要提供一些信息,也就是其他教程中提到的智能合约的ABI和地址。 .

进入新部署的“SimpleStorage”智能合约界面,右侧有四个按钮

以太坊合约交易技巧_以太坊合约地址_以太坊智能合约编写

一种。 “Deposit Eher”:发送以太币到这个智能合约

B.“复制地址”:复制智能合约的地址

C。 “Show QR Code”:显示一个二维码,如果用手机扫描,显示智能合约的地址

D. “Show Interface”:显示智能合约的JSON接口,也就是ABI

首先我们点击“复制地址”复制智能合约的地址,然后点击“显示接口”复制智能合约的所有JSON接口,在另一个需要运行智能合约的节点上打开Ethereum-Wallet,然后打开“CONTRACTS”界面点击“WATCH CONTRACTS”添加智能合约。

以太坊合约地址_以太坊合约交易技巧_以太坊智能合约编写

如上图所示,CONTRACT NAME填写,CONTRACT ADDRESS填写智能合约地址,JSON INTERFACE填写刚刚在“Show Interface”中复制的内容。 点击确定后,就可以看到智能合约并运行了。

4. 智能合约部署原理

1. 智能合约部署架构

虽然本文介绍的智能合约的部署是在图形界面下编译执行的,但最重要的是依赖后台运行Geth的节点。 这时候Geth提供了一个RPC接口,以图形化界面的方式将区块链提供给钱包。 信息。

RPC接口

Geth在8545端口提供了JSON RPC API,数据传输采用JSON格式,可以执行Web3库的各种命令以太坊合约交易技巧,比如向mist等前端图形客户端提供区块链信息。 默认访问地址为:8545。

当我们部署智能合约时,Ethereum-Wallet首先调用SOLC智能合约编译器将代码编译成EVM字节码,然后通过Geth的RPC接口将EVM字节码发送到以太坊网络。 经过全网验证, 同时写入到每个Geth管理的区块链中,结构如下

以太坊合约交易技巧_以太坊智能合约编写_以太坊合约地址

以太坊智能合约编写_以太坊合约地址_以太坊合约交易技巧

2.部署数据流

首先通过SOLC将代码编译成二进制代码,然后通过交易创建智能合约,其中包括创建者账户、智能合约内容、智能合约地址等关键信息。 智能合约地址的生成将创建者的账号和发送的交易数作为随机数输入,通过Kecca-256加密算法重新创建一个地址作为账号。

以太坊合约交易技巧_以太坊智能合约编写_以太坊合约地址

在部署过程中,需要通过交易进行部署,同时数据必须存储在区块链上,这就需要使用到GAS。

交易

交易是一条消息,从一个帐户发送到另一个帐户。 交易可以包含二进制数据(有效载荷)和以太币。

如果目标帐户包含代码,则将执行该代码和输入数据。

如果目标账户是零账户(账户地址为0),交易将创建一个新合约。 如上所述,这个智能合约地址不是零地址,而是根据合约创建者的地址和这个地址发送的交易数量计算得出的。 合约创建交易的有效负载作为 EVM 字节码执行。 执行的输出作为合约代码永久存储。 这意味着,为了创建合约,您不需要向合约发送实际的合约代码,而是返回可执行代码的代码。

气体

以太坊上的每笔交易都会收取一定数量的天然气。 gas 的目的是在支付执行费用的同时限制执行交易所需的工作量。 当EVM执行智能合约时,gas会按照一定的规则逐渐消耗。 事实上,GAS 是以太坊中一个相对较小的单位。 如果将以太币比作100元,那么GAS就可以看作是1分钱。 如果只有以太币,就会有问题。 每个人都需要买卖以太币,市场上会有价格波动。 可能会出现像比特币这样的情况,一天跌50%,涨50%。 这种计算的成本是不可接受的。 比如今天做加法是十元,明天做加法是一百元。 所以这里引入气体来解耦。 将市场波动和计算开销脱钩意味着以太坊和天然气之间存在汇率。 以太坊涨不涨无所谓,只要 gas 价格跌就行。 它必须保证我做同样的计算,消耗同样的法币。

gas price(gas price, in Ether)由交易创建者设定,发送账户需要预付交易费=gas price * gas amount。 如果执行后还有gas剩余,gas会返还给发送账户。

上一篇文章提到,部署智能合约使用0.00042个以太坊,换算成gas是21000个gas。

无论在哪里执行,一旦gas耗尽(比如下降到负值),都会触发out-of-gas异常。 当前调用框架所做的所有状态修改都将回滚。

5. 智能合约的运行原理

智能合约是部署在区块链上的代码。 区块链本身无法执行代码。 代码的执行在本地 EVM 中。 实际上,部署在区块链上的代码就是可以在本地生成原始智能合约代码的代码。 ,可以理解为区块链是一个数据库,客户端从数据库中读取存储的运行代码,在本地运行后,将结果写入区块链的数据库中。

以太坊合约地址_以太坊合约交易技巧_以太坊智能合约编写

本质上,以太坊的钱包也是智能合约的一个应用,以太坊搭建的是一个编写各种应用的平台。在下一篇文章中,我们将详细介绍智能合约的开发、编写和调试方法