基于以太坊的测试链发布一个智能合约
程序员文章站
2024-01-27 14:17:58
...
1,创建账户
- 使用METAMASK钱包来进行操作,具体的创建过程请自行查阅。创建好的账户如下图所示,账户余额显示为0
- 详情下面显示对应账户的地址,这个是最关键的信息
- 首先选择左上角头像旁边的按键,切换网络,此处选择Ropsten测试网络
- 然后点击存入,向水管智能合约申请以太币进行测试
- 选择测试水管这一条目选项,点击获取Ether
2,转账
进入如下的页面
- 首先查看user里面的地址是是否和先前创建的账户一致,如果一致代表没有问题
- 点击faucet的绿色按键,request 1 ether from faucet,点击一下申请一个比特币
- 如果网络状况良好,只需要10多秒以内,就可以看到transactions显示的一串哈希序列的交易信息,理论上只需要点击这个哈希序列就可以看到这笔交易的具体信息,但是由于不可抗力原因,查询网站是访问不了的
3,查看交易
- 点开查询网址,输入账户的地址(点击账户地址就可以自动复制),最下面显示的是刚才交易的具体信息,上面以546d757结尾的哈希序列就是交易信息,下一行的以397647结尾的字符串是合约账户的地址,后面是账户地址。表示一笔交易从合约账户转到用户的账户地址。
- 这次点击交易的哈希序列,就可以查看更加具体的信息,截屏如下
相关信息介绍如下
- Time 区块创建的时间
- Block 交易信息所处的高度
- Confirmations确认数
- Nonce 防止重放攻击/双花攻击
- Value 交易的钱数
- Fee费用
- Gas limit消耗gas的上限,
- Gas used用了多少gas
- gas price指gas的价格
- Input data相当于微信的转账说明,转账添加input data少见,一般用在智能合约中
4,编写合约
写一个智能合约,实现水管合约的功能
- 进入Remix Ethereum IDE网站,这是一个智能合约的在线编写运行的网站
- 整体的界面如下图所示
- 首先,在COMPLIER里面选择和程序代码相互匹配的编译器,比如代码写的是编译器版本大于0.4.17,那么我选择的编译器版本是0.4.26
- 可以勾选Auto compline开启自动编译或者不勾选,手动编译
- 如果编译成功的界面如上图所示,如果不成功,会显示出错的信息,对应修改代码即可
程序代码如下
pragma solidity ^0.4.17;
contract Faucet{
function withdraw(uint amount) public{
require(amount <= 100000000000000000);
msg.sender.transfer(amount);
}
function () public payable{}
}
5,部署合约
- 参考如下界面
- 首先切换ENVIROMNMENT为Injected Web3环境下
- 如果正确无误的情况下,ACCOUNT会显示账户地址
- 剩余选项选择默认值
- 点击Deploy进行合约部署
- 点击后,需要回到METAMASK钱包对于合约的创建和发布进行确认,确认成功之后,会显示如下界面
- 回到remix Ethereum IDE,就可以看到我们发布的合约的地址,点击复制地址,我们需要给合约地址转账
- 给合约地址转账,注意,需要将数量填写转账的钱数
- 查询相关信息,将智能合约的地址复制、粘贴到搜索框中,显示相关信息如下
- 可以看到,可以将该地址识别为以太坊 合约,也可以看到先前的转账信息
6,测试水管合约的功能
- 输入10000000,点击withdraw,向智能合约发起请求
- 查询合约的交易记录
- 如下图所展现的样子,合约地址向我们的账户转了一笔钱(微乎其微的一笔钱????????)
- 详细的交易信息
- 补充知识
- 如果单纯的转账,一般gas used都是21000,提升交易费的目的只是为了加快打包的速度
- 一般智能合约会存在input data,这一部分也会造成gas的花费
难点 nonce 可以查看我先前的文章
- nonce是为了防止双重支付而诞生的,记录从此合约产生的每一笔交易数,这个是唯一的
推荐阅读