| |
|
开发:
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 合同:
接下来,我们声明水龙头合约的第一个功能:
该函数名为 withdraw,它接受一个名为 withdraw_amount 的无符号整数(uint)参数。它被声明为公共函数,这意味着它可以被其他合约调用。函数定义遵循花括号:
提现功能的第一部分设定了提款限额。它使用内置的 Solidity 函数 require 来测试一个前提条件,即 withdraw_amount 小于或等于 100000000000000000 wei,这是 ether 的基本单位,相当于 0.1 ether。如果使用大于该数量的 withdraw_amount 调用 withdraw函数,则此处的 require 函数将导致合约执行停止并因异常而失败。 这部分合约是我们水龙头的主要逻辑。它通过限制提款来控制合约之外的资金流动。这是一个非常简单的控制,但可以让你一瞥可编程区块链的力量:控制资金的去中心化软件。 接下来是实际提现:
这里有一些神奇的东西:msg 对象,这是所有合约都可以访问的输入之一。它表示触发此合约执行的交易。属性 sender 是交易的发件人地址。函数传递是一个内置函数,它将以太从合约传递到调用它的地址。向后读,这意味着转移到触发此合约执行的 msg 的发送者。传递函数将金额作为其唯一参数。我们将 withdraw_amount 值作为参数传递给上面几行声明的 withdraw 函数。下一行是结束大括号,表示我们的 withdraw 函数定义的结束。下面我们再声明一个功能:
此函数是所谓的“回退”或默认函数,如果触发合约的交易未命名合约中的任何已声明函数或任何函数或未包含数据,则调用此函数。合约可以有一个这样的默认函数(没有名称),它通常是接收以太的函数。这就是为什么它被定义为公共和默认函数,这意味着它可以接受以太合约。除了接受以太之外,它没有做任何事情,如花括号{}中的空定义所示。如果我们创建一个将 ether 发送到合约地址的交易,就好像它是钱包一样,这个函数将处理它。 在我们的默认函数下面是最后的结束花括号,它表示了合约 Faucet 的定义结束。 编译水龙头合约现在我们有了第一个示例合约,我们需要使用 Solidity 编译器将 Solidity 代码转换为EVM 字节码,因此它可以由 EVM 执行。 使用 Chrome 浏览器导航到 Remix IDE: 在区块链上部署合同所以我们写了合约。我们把它编译成字节码。现在,我们需要在以太坊区块链上“注册”合约。我们将使用 Ropsten 测试网来测试我们的合约,这就是我们想要记录的区块链。在区块链上注册合约涉及创建一个特殊交易,其目的地是一个“零地址”,也就是地址为:0x0000000000000000000000000000000000000000。 首先,切换到“Run”选项卡,然后在“Environment”下拉选择框中选择“Injected 在区块浏览器中查看合同地址现在,我们已经在 Ropsten 区块链上记录了一份合约,我们可以看到它有一个以太坊地址。让我们在 ropsten.etherscan.io 区块浏览器上查看它,看看合约是什么样的。 在一个标签中打开 Remix,稍后我们会再次回顾它。现在,将浏览器导航到 提现我们的合约接下来,让我们从水龙头中提取一些资金。要提现,我们必须构造一个调用 withdraw函数的交易,并将 withdraw_amount 参数传递给它。为了使事情变得简单,Remix 将为我们构建该交易,MetaMask 将提供它以供我们批准。
由于 JavaScript 的限制,Remix 无法处理大到 10 ^ 17 的数字。相反,我们将它括在双引号中,以允许 Remix 将其作为字符串接收并将其作为 BigNumber 进行操作。如果我们不将它括在引号中,则 Remix IDE 将无法处理它并显示“Error encoding arguments:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 18:33:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |