波场(Tron)开发指南

in #starnote4 years ago

波场开发的实践总结:基础工具的使用,和合约的交互方法,单位转换和监听事件等。
-> 前往星空笔记

Sort:  
let res = await that.axios.get('/Test.json')
// console.log(66744, res)
let data = res.data
let tronWeb = window.tronWeb
let address = tronWeb.address.fromHex(data.networks['*'].address)  //转变成base58
let contract = tronWeb.contract(data.abi, address)
let s = await contract.a().call() //查询方法view
let stringx = 'WSTEEM是ERC20代币,旨在打通STEEM和以太坊网络的通道,使资产自由流通!'
let s2 = await contract.set(stringx).send() //更改方法

tronscan

tronscan.jpg

TRC20通证和ERC20通证类似,不过因为编译的版本不一致,导致在波场中OpenZeppelin的库无法使用,只能使用原文件。通读下通证的代码,函数基本一致,倒也不用太过担心。这里是PNUT合约,大家可以参考。

TRC20通证合约布署上线后,还需要在tronscan中录入,然后才能上线justswap和poloni这样的DEX。如上图所示,几个输入的参数要和通证合约保持一致,否则无法录入成功!

几点说明:

  1. 像PNUT这样是通过挖矿来分发的,并没有初始量。但tronscan中录入必须有这项参数,所以,可以设初始总量为1。tronscan网络会每隔一段时间(大约是24小时)对这些参数进行更新。当你第二天去查PNUT的总量时,这个参数会更新。
  2. 精度(小数位)最好设为6,而不是18!波场这边的最小单位是sun, 1trx = 1000000sun。并且poloni也只接受6位精度的通证。
  3. 在媒体和联系尽量填全,有助于提升大家对于通证的了解和信心。

Tron-Web:JavaScript接口,用于提供常用的账户,地址,转账,合约相关操作。相当于Ethereum的web3js。

tron-box:提供合约编译,部署,测试的命令行工具。作用相当于Ethereum的truffle工具链。

tronLink,tronPay: 提供浏览器环境的钱包插件,为dapp提供便利和安全的执行环境,相当于Ethereum的MetaMask,Scatter。

tron-grid:社区维护的主网和测试网HTTP API接口,相当于Ethereum社区中的Infura。

Tron-IDE: 一款帮助开发者开发智能合约的在线编辑器。它具有模块化的特点,以插件的方式为开发者提供智能合约的编辑,编译,部署,调试等功能。

Loading...
Loading...

货币
类似于solidity对ether的支持,波场虚拟机的代码支持的货币单位有trx和sun,其中1trx = 1000000 sun,大小写敏感,只支持小写。目前Tron-IDE支持trx和sun,在remix中,不支持trx和sun,如果使用ether、finney等单位时,注意换算(可能会发生溢出错误)。 我们推荐使用Tron-IDE代替remix进行tron智能合约的编写。

区块相关
block.blockhash(uint blockNumber) returns (bytes32):指定区块的区块哈希——仅可用于最新的 256 个区块且不包括当前区块;而 blocks 从 0.4.22 版本开始已经不推荐使用,由 blockhash(uint blockNumber) 代替
block.coinbase (address): 产当前区块的超级节点地址
block.difficulty (uint): 当前区块难度,波场不推荐使用,设置恒为0
block.gaslimit (uint): 当前区块 gas 限额,波场暂时不支持使用, 暂时设置为0
block.number (uint): 当前区块号
block.timestamp (uint): 当前区块以秒计的时间戳
gasleft() returns (uint256):剩余的 gas
msg.data (bytes): 完整的 calldata
msg.gas (uint): 剩余 gas - 自 0.4.21 版本开始已经不推荐使用,由 gesleft() 代替
msg.sender (address): 消息发送者(当前调用)
msg.sig (bytes4): calldata 的前 4 字节(也就是函数标识符)
msg.value (uint): 随消息发送的 sun 的数量
now (uint): 目前区块时间戳(block.timestamp)
tx.gasprice (uint): 交易的 gas 价格,波场不推荐使用,设置值恒为0
tx.origin (address): 交易发起者

Loading...
async transfer(){
  console.log(161222, "Yes, catch it:", window.tronWeb)
  let tronweb = window.tronWeb
  let sendTransaction = await tronweb.trx.sendTransaction("TVJ1Waucj32mSMuFRab7kn73Pm6KyZGBmg", 1000)
  console.log(566, sendTransaction)
}

波场中得到的uint数据都是16进制(hex,如:[{"_hex":"0x0f4240"}]),如果在js中做加减乘除可以自动转换成10进制,也可以自动调整。
1 trx = 1000000 sun

uint public b = 1 trx;

let  b = await contract.b().call() //查询方法view
console.log(333, 'b', tronWeb.toBigNumber(b).toFixed())
//333 "b" "1000000"

tronWeb.fromSun()
> tronWeb.fromSun("1000000")
'1'
本地创建的得到 object
浏览器创建的得到 string

tronWeb.toSun()
tronWeb.toSun(10)
>"10000000"

Coin Marketplace

STEEM 0.21
TRX 0.20
JST 0.034
BTC 98085.38
ETH 3350.61
USDT 1.00
SBD 3.03