ThinkPHP 接入以太坊

  1. 所需环境
    1. TP版本:thinkphp 5
    2. 节点服务器:https://infura.io/
    3. 所需扩展
      1. JSON-RPC(也可以使用web3)
      2. guzzlehttp(https://github.com/guzzle/guzzle
      3. ethereum-client (https://github.com/myxtype/ethereum-client
      4. simplito(https://github.com/simplito/elliptic-php
      5. neb.php(https://github.com/nebulasio/neb.php
      6. gmp PHP扩展
      7. scrypt PHP扩展
  2. 发行代币
    1. 转载自:https://www.it610.com/article/1282151197209280512.htm
  3. 创建钱包
    1.   $client = new \Client($this->url);
      
              list($address, $privateKey) = $client->newAccount();

      生成钱包地址以及私钥。

    2. 私钥一般通过keystore进行加密存储

  4. 钱包加密/解密
    1.  public function toKeyStore($password = '', $privateKey = '')
          {
              //私钥加密
              $acc1 = Account::newAccount();
              $acc1->setPrivateKey($privateKey);
      
              $keyString = $acc1->toKeyStore($password);
      
              return $keyString;
          }
      
          public function fromKeyStore($keyString = '', $password = '')
          {
              //私钥解密
      
              $data = Account::fromKeyStore($keyString, $password);//解密
              $privateKey = $data->getPrivateKey();
      
              return $privateKey;
          }

       

  5. 转账交易
    1. 如果是代币转账,使用remix 发行代币后,一定要记录好合约地址
    2. 如果是USDT(0xdac17f958d2ee523a2206206994597c13d831ec7)或其他币种,去ETH区块链浏览器中查询合约地址。
    3. public function transfer($from = '', $address = '', $privateKey = '', $num = '', $hash = '')
          {
              //转账
              $client = new \Client($this->url);
      
              $client->addPrivateKeys([$privateKey]);
              $contract = '';//合约地址
      
              //代币转账VALUE=0 即可
              $trans = [
                  "from" => $from,
                  "to" => $contract,
                  "value" => '0x0',
              ];
      
              $hash = Keccak::hash("transfer(address,uint256)", 256);
      
              $hash_sub = mb_substr($hash, 0, 8, 'utf-8');
      
              $fill_from = Tool::fill0(Utils::remove0x($address));//收款地址加密
      
              //转账金额
              $num10 = Utils::ethToWei($num);
      
              $num16 = Utils::decToHex($num10);
      
              $count = Tool::fill0(Utils::remove0x($num16));//转账金额加密后
              //拼接 data 字符串
              $trans['data'] = "0x" . $hash_sub . $fill_from . $count;;
      
              $trans['gas'] = dechex(hexdec($client->eth_estimateGas($trans)) * 1.5);//计算GAS值
              $trans['gasPrice'] = $client->eth_gasPrice();
      
              $trans['nonce'] = $client->eth_getTransactionCount($from, 'pending');//查询最后的区块
      
              $return_array = $client->sendTransaction($trans);//广播交易
      
              $return_array = json_decode($return_array, true);
      }

       

  6. 交易监听
    1. 需要自己写轮询或者websocket 进行监听区块链交易,查询到有自己数据库中同样的钱包地址,进行后续的处理
  7. 交易归集
    1. 如果是一个纯钱包,其实做不做归集都可以,转账款矿工费用,可由用户自行承担。
    2. 非纯钱包,需要监听到数据后,归集到平台总账户,归集完成后,更新用户数据,用户发起提币时,再有总账户转账到指定地址。
  8. 如有更好的方式或者技术,欢迎留言交流
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值