以太坊 solidity 通讯录合约 —— 转账还可以这么简单

版权声明:1、本BLOG的目的、形式及内容。   此BLOG为个人维护BLOG,内容均来自原创及互连网转载。最终目的为收集整理自己需要的文章技术等内容,不涉及商业用途。 2、有关原创文章的版权   本BLOG上原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。 3、有关本站侵权   本BLOG所转载的内容,均是本人未发现有对文章版权声明的文章且无来自传统媒体。如 https://blog.csdn.net/xq723310/article/details/82692861

    我们在进行以太坊进行转账的时候,是不是对地址感到很头疼;如果每个人地址都是对方的名字该多好。ENS是建立在以太坊区块系统上的域名系统,它将得到钱包的支持,它既是域名又可以绑定你的钱包,登录你的网站购物,然后款项付给了你企业同名的域名钱包,想象一下是不是很棒,解决了我们在转账的时候,需要输入一长串地址的麻烦。

    ENS现在还没有使用,今天我们实现一个个人的通讯合约,用户可以给自己好友设定一个代号,转账的时候不需要写地址,只需要写一个名字即可。

   老规矩先来理清一下思路,用户创建一个通讯录合约,用户可以手动进行关联地址和姓名,也可以进行修改和删除。还可以查询现在通讯录里的记录;当需要转账的时候,只需要选择姓名既可以。而不用写长长的地址。需要注意的是,收款的时候这个功能是没法使用的,你还是需要把自己的地址给别人。

pragma solidity ^0.4.7;

contract AddressList{
    address  owner;
    mapping (string => address)  linkman; //通讯录列表
    
    modifier isOwner{
        require(owner == msg.sender);
        _;
    }
    
    constructor() public{
        owner = msg.sender;
    }
    
    event Transfer(address to, uint amount);
    
    function addAddress(string man, address to) public  isOwner {
        linkman[man] = to;//添加新的联系人
    }
    
    function queryAddress(string man ) public  view isOwner returns(address) {
        return linkman[man];//查询联系人
    }
    
    function removeAddress(string man) public  isOwner{
        linkman[man]=address(0);
    }
    
    function changeAddress(string man, address to) public   isOwner{
        linkman[man] = to;
    }
    //用户可以直接使用姓名进行转账
    function transferTo(string man,  uint amount) payable  public{
        require(msg.sender.balance >= amount);
        require(linkman[man]!=address(0));
        
        linkman[man].transfer(amount);//获取到姓名对应的地址后,进行转账
        Transfer(msg.sender, amount);
    }
}

github,https://github.com/XuHugo/solidityproject/tree/master/addresslist

猜你喜欢

转载自blog.csdn.net/xq723310/article/details/82692861
今日推荐