账户地址与转账
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);
}
}
很有意思的一点,那就是账户是一串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
总结
- 账户的地址与转账逻辑
- 将账户地址与注册昵称ID等绑定取来方便记忆