【区块链2.0 以太坊学习笔记4】地址与交易及Mapping的绑定

账户地址与转账

pragma solidity ^0.4.0;

contract Finance {
  //此函数用来得到当前区块的地址
  function GetThis() view public returns (address) {
    return this;
  }

  //此函数用来得到当前区块的账户余额
  function GetThisBalance() view public returns (uint) {
    return this.balance;
  }

  //此函数用来获取任意账户的余额
  function GetBalance(address account) view public returns (uint) {
    return account.balance;
  }

  //当没有账户进行转账的时候,又发现有payable,就会将写入msg.value的货币转到当前区块中
  function PayToThis() public payable{
  }

  //当给了20ether时,只转账10 ether会有10 ether过剩,被转到当前区块中
  function PayToAccount1(address account) public payable{
    account.transfer(10 ether);
  }

  //此函数用来给某个账户转账
  function PayToAccount2(address account) public payable{
    account.transfer(msg.value);
  }

  //此函数也用来给某个账户转账,但send是底层函数,只会返回true or false,所以使用的时候出了bug也无法看到报错。
  //不推荐使用send
  function PayToAccount3(address account) payable{
    account.send(msg.value);
  }
}

【区块链2.0 以太坊学习笔记4】地址与交易及Mapping的绑定_第1张图片
很有意思的一点,那就是账户是一串40位的16进制数,而区块的地址也是这样,所以说我们可以给任意区块去转账。

将钱包地址与昵称ID绑定起来

pragma solidity ^0.4.0;

contract MappingTest {
  //mapping (type1 => type2) someMapping
  //三个参数的意思是将type2类型的值绑定到type1类型的值,someMapping指的是别名
  mapping (uint => address) IDMapping;
  mapping (string => uint) nameMapping;
  uint public registerID = 0;//初始化注册Id为0

//构造函数Bond将区块所有者钱包地址与注册ID绑定,将注册ID与昵称绑定
  function Bond(string name) public{
    address account = msg.sender;
    registerID++;

    IDMapping[registerID] = account;
    nameMapping[name] = registerID;
  }

//根据ID获取钱包地址
  function GetAddress(uint num) view public returns (address) {
    return IDMapping[num];
  }

//根据昵称获取ID
  function GetID(string name) view public returns (uint) {
    return nameMapping[name];
  }
}

msg.sender获取的是为这个区块花费gas的钱包地址,通过mapping的绑定功能可以避免记忆很难记住的钱包地址address

【区块链2.0 以太坊学习笔记4】地址与交易及Mapping的绑定_第2张图片

总结

  • 账户的地址与转账逻辑
  • 将账户地址与注册昵称ID等绑定取来方便记忆

你可能感兴趣的:(区块链)