广州市凯发娱乐平台科技有限公司
股票简称:凯发娱乐平台 丨 股票代码:696995 联系电话:020-90387985
客服帮助
客服

还有其他问题,请前往 " 联系我们 "

                联
				系
                客
                服
            
发送

联系方式

公司电话: 020-90387985

售后热线: 020-90387985

企业QQ: 953011539

凯发娱乐平台二维码

微信公众号

凯发娱乐平台

联系我们

  • 电话咨询:

  • 020-90387985

  • 传真:

  • 020-90387985-8477

  • Email:

  • service@9ygf.cn

  • 办公地址:

  • 广州市天河区天河北路908号高科大厦B座9468室

撤回转账,马云向骗子宣战!网友:再也不必忧虑白叟被骗了中国科技先生 ⋅

凯发娱乐平台2019-04-03 02:21:46

本年,和力辰光发布公告称:公司撤回IPO请求。排队历时近2年,和力辰光对撤回原因只说到“调整上市计划”,并未给出过多解说。

八,撤回物品

本年月日和力辰光发布公告称公司撤回请求排队历时近年和力辰光对撤回原因只说到调整上市计划并未给出过多解说。

八撤回物品。

本年月日和力辰光发布公告称公司撤回请求排队历时近年和力辰光对撤回原因只说到调整上市计划并未给出过多解说。

八撤回物品。

(1)、支付宝转账:支付宝账号:505575682@qq.com

(2)、也可增加微信15062401815转账

3.5 自动转账 transfer

    function transfer(address _to, uint256 _value)public  returns (bool success){
        require(_value >0 && balances[_to] + _value > balances[_to] && balances[msg.sender] > _value);
        balances[_to] += _value;
        balances[msg.sender] -= _value;
        Transfer(msg.sender, _to,_value);

        return true;
    }

转账:从自己账户向地址_to地址转入_value个Token

3.6 被迫转账
  • 完成转账同意:approve
    function approve(address _spender, uint256 _value) returns (bool success){
         //界说依靠条件,转账金额>0 并且 被转账户余额>转账金额
        require(_value >0 && balances[msg.sender] > _value);
        //将转账金额存入allowances调集中,对应联系可参阅···3.4界说存储变量···
        allowances[msg.sender][_spender] = _value;
        //触发Approval事情
        Approval(msg.sender,_spender,_value);
                return true;
    }

答应_spender从自己(合约调用方msg.sender)账户转走_value个Token

  • 创立被迫转账函数:transferFrom
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success){
        //取出本次当时地址对中答应转账的金额
        uint256 allowan = allowances[_from][_to];
        /*界说依靠条件:
        1. 答应转账的金额 > 转出的金额
        2. 转出方地址的余额>=转出的金额
        3. 转入方地址有必要是当时账户地址
        4. 转入方转账后地址有必要大于本来余额
        */
        require(allowan > _value && balances[_from] >= _value && _to == msg.sender && balances[_to] + _value>balances[_to]);
        //将本次转账金额从答应转账金额中扣除
        allowances[_from][_to] -= _value;
        //将本次转账金额从转出方余额中扣除
        balances[_from] -= _value;
        //将本次转账金额加入到转入方余额中
        balances[_to] += _value;
        //触发Transfer事情
        Transfer(_from,_to,_value);
        return true;
    }
5.终究代码
pragma solidity ^0.4.24;

contract EIP20Interface{
    //获取_owner地址的余额
    function balanceOf(address _owner) public view returns (uint256 balance);
    //转账:从自己账户向_to地址转入_value个Token
    function transfer(address _to, uint256 _value)public returns (bool success);

    //转账:从_from向_to转_value个Token
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
    //答应_spender从自己(调用方)账户转走_value个Token
    function approve(address _spender, uint256 _value) returns (bool success);
    //自己_owner查询__spender地址能够转走自己多少个Token
    function allowance(address _owner, address _spender) view returns (uint256 remaining);

    //转账的时分必需求调用的时刻,比方Tranfer,TransferFrom
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    //成功履行approve办法后调用的事情
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract BFCToken is EIP20Interface {
    //1.获取token姓名,比方"BruceFeng Coin"
    string public name;
     //2.获取Token简称,比方"BFC"
    string public symbol;
    //3.获取小数位,比方以太坊的decimals为18
    uint8 public decimals;
     //4.获取token发布的总量,比方HT 5亿
    uint256 public totalSupply;

    mapping(address=>uint256) balances ;

    mapping(address=>mapping(address=>uint256)) allowances;
    function BFCToken(string _name,string _symbol, uint8 _decimals,uint256 _totalSupply) public{       
    name = _name;
    symbol = _symbol;
    decimals = _decimals;
    totalSupply = _totalSupply;
    balances[msg.sender] = _totalSupply;
    }

    //获取_owner地址的余额
    function balanceOf(address _owner) public view returns (uint256 balance){
        return balances[_owner];
    }
    //转账:从自己账户向_to地址转入_value个Token
    function transfer(address _to, uint256 _value)public  returns (bool success){
        require(_value >0 && balances[_to] + _value > balances[_to] && balances[msg.sender] > _value);
        balances[_to] += _value;
        balances[msg.sender] -= _value;
        Transfer(msg.sender, _to,_value);

        return true;
    }

    //转账:从_from向_to转_value个Token
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success){
        uint256 allowan = allowances[_from][_to];
        require(allowan > _value && balances[_from] >= _value && _to == msg.sender && balances[_to] + _value>balances[_to]);
        allowances[_from][_to] -= _value;
        balances[_from] -= _value;
        balances[_to] += _value;
        Transfer(_from,_to,_value);
        return true;
    }
    //答应_spender从自己(调用方)账户转走_value个Token
    function approve(address _spender, uint256 _value) returns (bool success){
        require(_value >0 && balances[msg.sender] > _value);
        allowances[msg.sender][_spender] = _value;
        Approval(msg.sender,_spender,_value);
                return true;
    }
    //自己_owner查询_spender地址能够转走自己多少个Token
    function allowance(address _owner, address _spender) view returns (uint256 remaining){
        return allowances[_owner][_spender];
    }

}
四. 代码调试测验

调试环境: JavaScript VM

2.2 自动转账

留意点: 有必要确保转账账户需求挑选正确

从地址A给地址B转账1888个Token

地址B给地址A转账88个Token

2.3 被迫转账

其实被迫转账这个概念是笔者自己界说的,让他人从自己这边取走东西,能够简略理解为被迫,如此界说仅仅为了解说的便利。

地址A: 0: uint256: balance 9999999999999999998200
地址B: 0: uint256: balance 1800
  • 履行转账操作

五.代码布置转账

测验环境:本文挑选运用Rinkeby环境进行合约布置

2.转账测验 2.1 增加Token到钱包中

2.2 转账至其他账户地址

以上布置合约的账户地址(地址1)为: 0x18850c9cE7B2274EbB0c78e6221844AC76715494

点击SEND履行转账操作

2.3 转账成功承认

进入到地址2中进行Token增加

转账成功

CSRF***正是建立在会话之上的,比方当你登录了网上银行,正在进行转账事务,这时你的某个QQ老友(***者)发来一条音讯(URL),这条音讯是***者精心结构的转账事务代码,并且与你所登录的是同一家网络银行,你或许以为这个网站是安全的,但是当你打开了这条URL后,你帐户中的余额或许会悉数丢掉。

 private int[] accounts; // 账户数组,其索引为账户ID,内容为金额
 private Lock lock = new ReentrantLock();
 public boolean transfer(int from, int to, int money) {
 lock.lock();
 try {
 if (accounts[from] money)
 return false;
 accounts[from] -= money;
 accounts[to] += money;
 return true;
 } finally {
 lock.unlock();
 }

 好了,加锁后这个代码就能确保金额不出错了。但问题又呈现了,一次只能履行一个转账进程!意思便是A给B转账的时分,C要给D转账也得等A给B转完了才干开端转。这就有点扯蛋了,就像只要一个货台,所有人有必要排队等前面的处理完了才干到自己,功率太低。

处理这种状况有一个计划:A给B转账的时分只确定A和B的账户,使其转账期间不能再有其他针对A和B账户的操作,但其他账户的操作能够并行发作。类似于如下场景:

 private int[] accounts;
 private KeyLock Integer lock = new KeyLock Integer 
 public boolean transfer(int from, int to, int money) {
 Integer[] keys = new Integer[] {from, to};
 Arrays.sort(keys); //对多个key进行排序,确保确定次序避免死锁
 lock.lock(keys);
 try {
 //处理不同的from和to的线程都可进入此同步块
 if (accounts[from] money)
 return false;
 accounts[from] -= money;
 accounts[to] += money;
 return true;
 } finally {
 lock.unlock(keys);
 }

 好,东西有了,接下来便是测验了,为了测出并行度,我把转账进程延长了,加了个sleep(2),使每个转账进程至少要花2毫秒(这仅仅个demo,实在环境下对数据库操作也很费时)。


ICP备18092235818688 联系地址:广州市天河区天河北路908号高科大厦B座9468室 客服电话:020-90387985 Copyright©2008-2016 版权所有 广州市凯发娱乐平台科技有限公司 网站地图 法律声明隐私保护招聘英才意见反馈

Powered by 凯发娱乐平台 Copyright ©2010 https://www.9ygf.cn (GROUP) CO.,LTD. All Right Reserved.

公网安备 28645009