地址、交易篇
注:以下代码来源于b站上面的基于以太坊的智能合约开发教程【Solidity】链接:https://www.bilibili.com/video/BV1St411a7Pk?p=34
使用钱包转移资金
pragma solidity >=0.4.15 <0.6.0;
contract payableTest
{
//转账
function pay() public payable
{
}
//获取合约地址余额
function getBalance() public returns(uint)
{
return this.balance;
}
//获取合约地址
function getThis() view returns(address)
{
return this;
}
//获取指定地址的余额
function getrandomBalance(address account) view returns(uint)
{
return account.balance;
}
}
编译完成后,部署合约,然后再交易金额上面写上10,也就是转10个以太币到合约账户中,点击2所示的pay按钮,可以看到控制台显示转账成功,然后点3所示的getBalance获取当前合约地址的余额,5所示的getThis是指当前合约的地址,4所示的getRandomBalance是指根据所输入的地址显示他的余额。
send和transfer区别
pragma solidity >=0.4.15 <0.6.0;
contract transfer
{
//向指定地址转账地址转账
function transfer() payable{
address account=0xca35b7d915458ef540ade6068dfe2f44e8fa733c;
account.transfer(msg.value);
}
//用msg.value向合约转账,但是要加上回滚函数
function transfer1() payable{
this.transfer(msg.value);
}
function () payable
{
}
//send转账,这个返回值是bool类型,在控制台查看,transfer要比send安全
function sendMoney() payable returns(bool){
address account=0xca35b7d915458ef540ade6068dfe2f44e8fa733c;
return account.send(msg.value);
}
//获取转账人的地址
function getGloble1() view returns(address)
{
return msg.sender;
}
//获取块号
function getGloble2() view returns(uint)
{
return block.number;
}
//块的难度
function getGloble3() view returns(uint)
{
return block.difficulty;
}
}
映射
pragma solidity >=0.4.15 <0.6.0;
contract mappingTest
{
//这是这地址-》id的映射,然后又将id-》name上
mapping(address=>uint) idmapping;
mapping(uint=>string) namemapping;
uint sum=0;
//注册账户
function register(string name)
{
address account=msg.sender;
sum=sum+1;
idmapping[account]=sum;
namemapping[sum]=name;
}
//获取id需要的地址是账户地址不是合约地址
function getIDAddress(address are) view returns(uint)
{
return idmapping[are];
}
//获取名字需要的地址是账户地址不是合约地址
function getNameById(uint id) view returns(string)
{
return namemapping[id];
}
//如果要注册第二个人,需要换一个账户地址
function getSum() view returns(uint)
{
return sum;
}
}