合约编写实战实例

一、简单代币合约pragma solidity > 0.4.22;contract Coin{ //这里我们定义了一个address 作为key, uint做为value的hashTable balances; 我们还定义 了一个address的变量minter; address public minter; mapping(address=>uint) balances; event Sent(address from, address to, uint amount); construc
摘要由CSDN通过智能技术生成

一、简单代币合约

pragma solidity > 0.4.22;
contract Coin{ //这里我们定义了一个address 作为key, uint做为value的hashTable balances; 我们还定义 了一个address的变量minter; address public minter; mapping(address=>uint) balances; event Sent(address from, address to, uint amount); constructor(){ //代表创建这个合约的账户地址,被赋值给变量minter. minter = msg.sender; }//添加一个挖矿合约 function mint(address receiver, uint amount) public{ require(msg.sender == minter); balances[receiver] += amount; }function send(address receiver, uint amount) public{ require(balances[msg.sender] >= amount); balances[msg.sender] -= amount; balances[receiver] += amount; emit Sent(msg.sender,receiver,amount); } }
解析:
上面实现一个简单的加密货币,币在这里可以无中生有,但只有创建合约的人才能做到,且任何人都可以给他人转币,无需注册名和密码。

address 类型是一个160位的值,不允许任何算数操作,这种类型适合存储合约地址或外部人员。
mappings 可看作是一个哈希表,它会执行虚拟初始化,以使得所有可能存在的键都映射到一个字节表示为全零的值。
event Sent(address from, address to, uint amount) ;声明了一个所谓的事件,它在send函数最后一行被发出。用户界面可以监听区块链上正在发送的事件,且不会花费太多成本,一旦它被发出,监听该事件的listener都将收到通知,而所有的事件都包含了 from , t o和 amoun t三个参数,可方便追踪事务。
msg.sender 始终是当前函数或者外部函数调用的来源地址。
最后真正被用户和其他合约所调用的,用于完成本合约功能的方法是 mint 和 send 。若 mint 被合约创建者外的其他调用则说明都不会发生。

二、水龙头合约

水龙头账户是一个合约账户,水龙头就是一份合约,而整个网站就
是合约+前端组成的DApp。下面我们通过 Remix 来编写一个简单的水龙头合约,借此了解如何创建、部署合约以及一些 Solidity 的基本语法。

首先打开 Remix,并新建一个名为 faucet.sol 的文件,该文件就是 Solidity 的源文件.
打开 faucet.sol,并写入如下代码:
pragma solidity ^0.7.0; contract faucet { function withdra

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值