首页 > 编程知识 正文

usdt波场钱包,usdttrc20钱包

时间:2023-05-03 17:05:11 阅读:249200 作者:4738

本篇文章仅用于技术交流、学习研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关。本博客所有原创作品,包括文字、资料、图片、网页格式,转载时请标注作者与来源。非经允许,不得用于赢利目的。本博客受中国知识产权、互联网法规和知识共享条例保护和保障,任何人不得进行旨在破坏或牟取私利的行为。本博客声明以简体中文版为准,不对其他语言版本负责。 研究目的

目前 Travala、namecheap、imToken 以及国内20多家正在经营的企业(来源知乎)均不同程度开始支持与区块链相关的服务,由于区块链独特的运行模式在未来可能是新一轮机会,所以本次研究采用电商系统内最重要的支付环节来演示如何使用波场TRC20 USDT进行付款。

操作流程

用户在网页端选择波场USDT支付,支付中台将引导用户进入付款界面,当检测支付环境正常后,用户点击确认签名付款,系统调用用户电脑端或手机端区块链钱包进行签名与广播,完成前端付款流程。待后台确认对应交易在区块链最终完成后,将完成最终交易,并通知商户,此时应用系统向用户提供相关服务,最终整个流程结束。以下为用户简要的操作流程图:

整个操作流程与支付宝相差不大,最重要的区别在用户可选择任意一款(可信任)用于签名、广播的钱包。这就是区块链所带来的去中心化后所有到区块链系统的参与者均可以随时查看、写入、验证数据。

波场 TRON存在TRX、TRC 2类代币。我们研究的Tether USDT 通证是发行在Token TRC20 USDT 内的。所以USDT也是基于合约的,合约在技术人员角度来说就是可编程的一段逻辑,那么通过什么样的方式才能实现USDT的相互转账呢?

首先需要知道IERC20接口,官方Github地址,其中定义了6种功能与2个事件,可以做到查看发行量、查看指定账户余额、hhdwx账户转账、授权第三方从通证拥有者转账、供第三方从通证拥有者转账、查询可供第三方转账的查询账户的通证余额。我们只需要关注Transfer方法。

/** *@dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */function transfer(address recipient, uint256 amount) external returns (bool);

该方法的含义是付款人调用该方法时,需要传入一个收款人地址和转账金额,当调用成功后,付款人相应的金额则会自动转移到收款人地址内,即完成了转账交易,就是如此简单。

由于支付系统不涉及读取用户钱包密钥(可以简单理解为支付宝、微信的密码),在签名时(可以理解为用户在支付宝付款时输入支付密码)必须依赖用户所安装的客户端钱包完成,所以选择TronWeb来完成该功能。

TonWeb是一个JavaScript库,是TRON的官方工具包,内部则提供了合约的调用方法。

const TronWeb = require('tronweb')const HttpProvider = TronWeb.providers.HttpProvider;const fullNode = new HttpProvider("https://127.0.0.1:8090");const solidityNode = new HttpProvider("https://127.0.0.1:8090");const eventServer = new HttpProvider("https://127.0.0.1:8090");const privateKey = "your private key";const tronWeb = new TronWeb(fullNode,solidityNode,eventServer,privateKey);async function triggerSmartContract() { /* 该值则是TRON USDT的合约地址,在主网的地址为 https://tronscan.io/#/token20/TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t */ const trc20ContractAddress = "TQQg4EL8o1BSeKJY4土豪的电灯胆8TB8XK7xufxFBvK";//contract address try { let contract = await tronWeb.contract().at(trc20ContractAddress); let result = await contract.transfer( //该值为收款人地址 "TVDGp...", //该值为转账金额 1000000 ).send({ feeLimit: 1000000 }).then(output => {console.log('- Output:', output, 'n');}); console.log('result: ', result); } catch(error) { console.error("trigger smart contract error",error) }}

调用完以上方法后,用户钱包则会弹出确认框让用户确认转账信息,如:收款人、付款人、对应合约、金额等,待用户确认后,该方法将返回一个已签名的对象,如下所示:

{"visible":false,"txID":"385176d7633b192c3a80e3c69a54ebc9e2f75503712ae8f60ea7598a09d99ce1","raw_data":{"contract":[{"parameter":{"value":{"data":"a9059cbb000000000000000000000000cfaf4ad376a7bf5f2dc33cc11dd6b3a0320060310000000000000000000000000000000000000000000000000000000000000032","owner_address":"41a0b28b3671d8e836ceeeb19476c42c8c9fd8aa73","contract_address":"41d2efa9e046f38d11e60d553f3c9b23605eda4329"},"type_url":"type.googleapis.com/protocol.TriggerSmartContract"},"type":"TriggerSmartContract"}],"ref_block_bytes":"594b","ref_block_hash":"e1cf4fbd0625ee08","expiration":1615856589000,"fee_limit":100000000,"timestamp":1615856531319},"raw_data_hex":"0a02594b2208e1cf4fbd0625ee0840c8b1bbc4832f5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a1541a0b28b3671d8e836ceeeb19476c42c8c9fd8aa73121541d2efa9e046f38d11e60d553f3c9b23605eda43292244a9059cbb000000000000000000000000cfaf4ad376a7bf5f2dc33cc11dd6b3a032006031000000000000000000000000000000000000000000000000000000000000003270f7eeb7c4832f900180c2d72f","signature":["8e9a1d5688921648e382b992f726847a697c7eadbd8573b4e6b87875dfbbad7c7bc5c6fcf9d41396d0fcaa6b092a9e607f8024b782c7acecf4f0243e87581b1100"]}

我们将其中的txID解析出来,并发送到服务器端,通过Tronj与TronGrid确认交易是否合法,最终便完成订单的状态变更。

Tronj查询交易信息

TronGridApi查询交易事件

总结 USDT是发行在合约内的,调用合约提供的转账方法接口完成支付功能。支付中台不会存储用户的钱包密钥,必须使用TronWeb到客户端进行签名。将签名后的txID发送到服务端,服务端验证通过后变更订单状态。
Java日期工具类的封装详解

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。