主页 > imtoken官方版下载手机版 > 以太坊升级了,还好Go语言调用智能合约的方式没有太大变化

以太坊升级了,还好Go语言调用智能合约的方式没有太大变化

imtoken官方版下载手机版 2023-10-28 05:08:11

比特币从2009年诞生到现在已经10年了,区块链技术也从一开始默默无闻,到如今闻名全球。 利用区块链技术,可以制造不需要任何国家背书的金融产品,让区块链技术为世界所熟知。 以太坊作为继承和改造的产物,其全球编程技术极大地促进了区块链技术的发展。

作为改进者,以太坊增加了智能合约的功能。 全球爱好者可以编写自己的智能合约,并在全球以太坊网络中运行。 它有一个美丽的梦想,就是要在全世界做合同。 那么智能合约到底是什么?

什么是智能合约?

具体什么是智能合约,我们先看看以太坊智能合约的英文:smart contract,可以分为两部分,smart在合约中。 合同很容易理解。 合同就是合同,是事前约定的规则以太坊有智能账户吗,是事情发生后双方不得不付出和接受的代价。 智能化的意思就是这个合约(contract)可以自动触发和执行,不用担心违约和违约。 什么都写在合同里,一目了然。 这样做的好处是双方无需建立信任就可以完成交易。

智能合约应该怎么写?

开发以太坊智能合约的门槛并不高。 目前网上的学习资源很多,但是自己筛选还是需要一些过程的。 那么开发智能合约呢? 从目前的区块链技术发展来看,智能合约可以用solidity、python、golang、c++、c#等语言开发。 如果你想学习一门语言,就把它当作一门新语言来学习。 学习一门新语言的过程不外乎以下几个步骤:

solidity的学习也会包含这些内容,但是区块链毕竟是一门特殊的技术,智能合约的学习会比其他内容更加具体。 比如你需要了解区块链的底层原理,你需要了解智能合约。 智能合约的运行原理,因为智能合约离金钱太近了,所以还是需要学习如何编写安全的智能合约。 最后,你还得了解一些智能合约讨论的标准,比如ERC20、ERC721等,褒贬不一。

在以太坊开发环境安装智能合约编辑环境--remix

remix其实是集成在网页中的在线编辑环境,但是对网络有一定的要求,相对来说更新更及时。 如果线上环境无法使用,可以在本地环境安装。 在下面的geth安装示例中,有Introduction,但是建议使用线上环境,本地经常会出问题。 混音在线环境:

以太坊客户端安装--geth

这里主要是geth的安装,可以针对不同的平台进行安装,推荐使用类Unix系统。具体安装可以参考

也有一些人更喜欢使用 ganache 作为以太坊客户端的学习工具。 相对而言,图形比命令行更容易接受。

geth私链搭建

geth是以太坊提供的客户端软件。 有了它,你可以加入以太坊主网,也可以自己搭建一条私链。 对于学习者,一般都是自己搭建一条私链。

{
  "config": {
        "chainId": 18,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",

以太坊智能合约取款_以太坊有智能账户吗_sitehqz.com 以太坊 智能合约

"difficulty" : "0x2", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }

初始化

geth init genesis.json --datadir ./data 

如果是第一次启动,或者genesi.json文件有变化,必须初始化。 data是存放数据的目录,可以不存在。 建议找一个独立的目录。

geth --datadir ./data --networkid 18 --port 30303 --rpc  --rpcport 8545 --rpcapi 'db,net,eth,web3,personal' --rpccorsdomain '*' --gasprice 0  console 2> 1.log

简易教程

大家可以下载我的github项目,直接用脚本启动。 三步就够了


$git clone https://github.com/yekai1003/rungeth

以太坊智能合约取款_sitehqz.com 以太坊 智能合约_以太坊有智能账户吗

$cd rungeth $geth init genesis.json --datadir ./data $./rungeth.sh

geth启动后,我们会进入一个管理控制台,在这里我们可以进行创建账户、解锁账户、挖矿、查询余额等操作。

geth命令行客户端操作

geth启动后,进入管理控制台,会看到如下信息:

ykdeMac-mini:eth yekai$ ./rungeth.sh 
localhost:rungeth yekai$ ./rungeth.sh 
Welcome to the Geth JavaScript console!
instance: Geth/v1.9.6-stable/darwin-amd64/go1.13.1
at block: 0 (Thu, 01 Jan 1970 08:00:00 CST)
 datadir: /Users/yekai/eth/rungeth/data
 modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
> 

注意123是密码,返回的字符串才是以太坊的账户地址

以太坊智能合约取款_sitehqz.com 以太坊 智能合约_以太坊有智能账户吗

> eth.accounts
[]
> personal.newAccount("123")
"0xdc78ec60eba4eb3bf8a497d94223615d43352c7e"
> eth.accounts
["0xdc78ec60eba4eb3bf8a497d94223615d43352c7e"]

eth.accounts 是查看当前有哪些账户可用。

> acc0=eth.accounts[0]
"0xdc78ec60eba4eb3bf8a497d94223615d43352c7e"
> eth.getBalance(acc0)
0

一开始账户里肯定没有钱,需要挖才能拿到钱。

> miner.start(1)
null
> eth.getBalance(acc0)
0
> eth.getBalance(acc0)
0

以太坊有智能账户吗_以太坊智能合约取款_sitehqz.com 以太坊 智能合约

> eth.getBalance(acc0) 0 > eth.getBalance(acc0) 0 > eth.getBalance(acc0) 20000000000000000000 > miner.stop() null

miner.start(1) 开始挖矿,1可以省略,代表实际挖矿线程数。

账户一旦有钱就可以挥霍,但在remix环境下使用时,必须先解锁。

> personal.unlockAccount(acc0,"123")
true

如果解锁命令失败,需要在geth启动时添加参数以太坊有智能账户吗,这也是新版以太坊客户端的一个更新。

--allow-insecure-unlock

智能合约开发

先看一个简单的例子,写一个最简单的智能合约:

pragma solidity^0.5.11;

以太坊智能合约取款_sitehqz.com 以太坊 智能合约_以太坊有智能账户吗

contract Person { string public name ; function setName(string memory _name) public { name = _name; } }

第一句是解释编译器版本。 使用大于等于0.5.11的编译器编译本合约,编译器版本不能超过0.5的范围。

在 remix 部署中可以看到如下效果:

以太坊有智能账户吗_sitehqz.com 以太坊 智能合约_以太坊智能合约取款

图片

我们看到一个黄色的 setName 函数和一个蓝色的 name 函数。 黄色的每次调用都需要gas,而蓝色的则不需要提供gas。 可能还有人想知道name函数是怎么出来的。 只要我们将变量声明为public,它就会自动生成。

我们可以先调用name看看效果,但是什么也没有。

以太坊有智能账户吗_sitehqz.com 以太坊 智能合约_以太坊智能合约取款

图片

我们使用 setName 来修改名称:

以太坊有智能账户吗_sitehqz.com 以太坊 智能合约_以太坊智能合约取款

图片

然后我们再点一下名字看看效果。

以太坊有智能账户吗_sitehqz.com 以太坊 智能合约_以太坊智能合约取款

图片