IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 在 Remix 上构建简单的水龙头合约 -> 正文阅读

[区块链]在 Remix 上构建简单的水龙头合约

编写水龙头合约

对于我们的第一个例子,我们将编写一个控制水龙头的合约。我们已经在 Ropsten 测试网络上使用了一个水龙头来测试 ether。水龙头是一件相对简单的事情:它会向任何要求的地址发出以太,并且可以定期重新填充。当然,我们可以将水龙头实施为由人(或 Web服务器)控制的钱包,不过现在我们的目标是学习智能合约,所以我们将编写实施水龙头的Solidity 合同:
Faucet.sol:实施水龙头的 Solidity 合同

pragma solidity ^0.4.19;

contract Faucet {
// Give out ether to anyone who asks
function withdraw(uint withdraw_amount) public {
 // Limit withdrawal amount
 require(withdraw_amount <= 100000000000000000);
 // Send the amount to the address that requested it
 msg.sender.transfer(withdraw_amount);
 }
// Accept any incoming amount
function () public payable {}
}


接下来,我们声明水龙头合约的第一个功能:

function withdraw(uint withdraw_amount) public {

该函数名为 withdraw,它接受一个名为 withdraw_amount 的无符号整数(uint)参数。它被声明为公共函数,这意味着它可以被其他合约调用。函数定义遵循花括号:

require(withdraw_amount <= 100000000000000000);

提现功能的第一部分设定了提款限额。它使用内置的 Solidity 函数 require 来测试一个前提条件,即 withdraw_amount 小于或等于 100000000000000000 wei,这是 ether 的基本单位,相当于 0.1 ether。如果使用大于该数量的 withdraw_amount 调用 withdraw函数,则此处的 require 函数将导致合约执行停止并因异常而失败。

这部分合约是我们水龙头的主要逻辑。它通过限制提款来控制合约之外的资金流动。这是一个非常简单的控制,但可以让你一瞥可编程区块链的力量:控制资金的去中心化软件。

接下来是实际提现:

msg.sender.transfer(withdraw_amount);

这里有一些神奇的东西:msg 对象,这是所有合约都可以访问的输入之一。它表示触发此合约执行的交易。属性 sender 是交易的发件人地址。函数传递是一个内置函数,它将以太从合约传递到调用它的地址。向后读,这意味着转移到触发此合约执行的 msg 的发送者。传递函数将金额作为其唯一参数。我们将 withdraw_amount 值作为参数传递给上面几行声明的 withdraw 函数。下一行是结束大括号,表示我们的 withdraw 函数定义的结束。下面我们再声明一个功能:

function () public payable {}

此函数是所谓的“回退”或默认函数,如果触发合约的交易未命名合约中的任何已声明函数或任何函数或未包含数据,则调用此函数。合约可以有一个这样的默认函数(没有名称),它通常是接收以太的函数。这就是为什么它被定义为公共和默认函数,这意味着它可以接受以太合约。除了接受以太之外,它没有做任何事情,如花括号{}中的空定义所示。如果我们创建一个将 ether 发送到合约地址的交易,就好像它是钱包一样,这个函数将处理它。

在我们的默认函数下面是最后的结束花括号,它表示了合约 Faucet 的定义结束。

编译水龙头合约

现在我们有了第一个示例合约,我们需要使用 Solidity 编译器将 Solidity 代码转换为EVM 字节码,因此它可以由 EVM 执行。

使用 Chrome 浏览器导航到 Remix IDE:
https://remix.ethereum.org/

在这里插入图片描述

在区块链上部署合同

所以我们写了合约。我们把它编译成字节码。现在,我们需要在以太坊区块链上“注册”合约。我们将使用 Ropsten 测试网来测试我们的合约,这就是我们想要记录的区块链。在区块链上注册合约涉及创建一个特殊交易,其目的地是一个“零地址”,也就是地址为:0x0000000000000000000000000000000000000000。
零地址是一个特殊地址,告诉以太坊区块链我们想要注册合约。不过我们不需要手动输入这么多个 0,Remix IDE 将为我们处理所有这些并将交易发送到 MetaMask。

首先,切换到“Run”选项卡,然后在“Environment”下拉选择框中选择“Injected
Web3”。这将 Remix IDE 连接到 MetaMask 钱包,并通过 MetaMask 连接到 Ropsten测试网络。一旦你这样做,你可以在环境下看到“Ropsten”。此外,在帐户选择框中,它显示你的钱包的地址:
在这里插入图片描述
现在,稍微等一下:在 Ropsten 上部署合约大约需要 15 到 30 秒。它和主网完全一样采用了 PoW 的机制,出块的时间大概是 15 秒。创建合约后,它将显示在“Run”选项卡的底部:

在这里插入图片描述

在区块浏览器中查看合同地址

现在,我们已经在 Ropsten 区块链上记录了一份合约,我们可以看到它有一个以太坊地址。让我们在 ropsten.etherscan.io 区块浏览器上查看它,看看合约是什么样的。

在一个标签中打开 Remix,稍后我们会再次回顾它。现在,将浏览器导航到
ropsten.etherscan.io 并将地址粘贴到搜索框中。你应该看到合约的以太坊地址历史:
在这里插入图片描述

提现我们的合约

接下来,让我们从水龙头中提取一些资金。要提现,我们必须构造一个调用 withdraw函数的交易,并将 withdraw_amount 参数传递给它。为了使事情变得简单,Remix 将为我们构建该交易,MetaMask 将提供它以供我们批准。
返回 Remix 选项卡,查看“Run”选项卡下的合约。你应该看到一个标有“Withdraw”的红色框,其中包含一个标记为 uint256 withdraw_amount 的字段条目:

在这里插入图片描述
这是合约的 Remix 接口。它允许我们构造调用合约中定义的函数的交易。我们将输入withdraw_amount 并单击“Withdraw”按钮以生成交易。
首先,让我们弄清一下 withdraw_amount。我们想尝试提现 0.1 以太,这是我们合约允许的最大金额。请记住,以太坊中的所有货币值都在内部以 wei 表示,而我们的提现功能期望 withdraw_amount 也以 wei 计价。我们想要的数量是 0.1 以太, 这是100000000000000000 wei(1 后跟 17 个零)。

由于 JavaScript 的限制,Remix 无法处理大到 10 ^ 17 的数字。相反,我们将它括在双引号中,以允许 Remix 将其作为字符串接收并将其作为 BigNumber 进行操作。如果我们不将它括在引号中,则 Remix IDE 将无法处理它并显示“Error encoding arguments:
Error:Assertion failed”,好在 Remix 会帮我们做自动转换
在 withdraw_amount 框中键入 100000000000000000,然后单击“Withdraw”按钮:

在这里插入图片描述
MetaMask 将弹出一个交易窗口供你批准。点击“Confirm”将你的提款调用发送给合约。
等一下,然后重新加载 etherscan 区块资源管理器,以查看在水龙头合约地址历史记录中的交易。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:52:08  更:2021-09-07 10:52:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 9:54:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码