TRON Developer Hub CN

TRON开发者中心

欢迎来到TRON开发者中心。您将找到全面的指南和文档,以帮助您尽快开始使用TRON Developer Hub,并在遇到困难时提供支持。让我们跳进去吧!

Get Started    

设置DApp环境

介绍

目前,我们可以通过在TRON的私人链上建立智能合约环境来降低开发成本,该环境不会消耗公共连锁资源。 TRON的虚拟机与以太坊的虚拟机高度兼容,大多数用Solidity编写的智能合约也可以在TRON网络上运行。基于TRON的智能合约可为其用户提供高TPS和免费访问大多数方案。毫无疑问,这对整个智能合约社区来说都是重要的一步。本文介绍了部署智能合约并与之交互的基本方法。

先决条件

TRON运行合同的网络

部署和使用合同需要消耗一定量的资源(内存,CPU和存储等)。因此,建议开发人员在其专用网络上调整和测试其智能合约,并在将其部署到TestNet或MainNet上之前确认合同可用。有关部署完整节点或 TRON-CLI https://developers.tron.network/docs/getting-started-1“target =”_ blank“> TRON Docker快速入门,了解有关部署专用网络的步骤。

私有链的块创建节点的地址:TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY

见证私钥:da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0

TRON Box

TRON Box是一个用于测试,编译和部署TRON智能合约和DApps的框架。 TRON Box指南详细介绍了设置和部署步骤。

智能合约发展

此时,我们建议 Remix 作为早期阶段编译和测试的编码环境。合同完成后,开发人员可以将合同复制到 SimpleWebCompiler 进一步开发,然后获得ABI和ByteCode。我们提供了一个简单的数据访问的可靠性代码示例,以说明编译,部署和调试过程。

    pragma solidity ^0.4.0;
    contract DataStore {
    
        mapping(uint256 => uint256) data;
    
        function set(uint256 key, uint256 value) public {
            data[key] = value;
        }
    
        function get(uint256 key) view public returns (uint256 value) {
            value = data[key];
        }
    }

1. 启动私人链

通过检查FullNode / logs / tron.log确保已成功部署先决条件中的专用链,并查看是否出现持久块生成的日志消息“生成块成功”。

2. 开发智能合约

将上面提到的代码复制到Remix进行编译和调试。确保代码逻辑正确,代码本身没有错误。

3. 在 SimpleWebCompiler 中编译

TRON编译器与以太坊的编译器略有不同,并且仍在与Remix集成。因此,我们提供了一种获取ABI和ByteCode的临时方法,而不是直接从Remix获取它们。将上面的代码复制到SimpleWebCompiler,然后单击Compile按钮以获得ABI和ByteCode。

4. 通过 TRON Box 部署智能合约

有关详细信息,请参阅 TRON Box 智能合约部署指南

5. 通过Wallet-CLI部署智能合约

下载Wallet-Cli,文件然后编译。

# 克隆库

git clone https://github.com/tronprotocol/wallet-cli
cd  wallet-cli

# 编

./gradlew build
cd  build/libs

注意

Wallet-CLI的默认配置将连接到本地127.0.0.1:50051完整节点。如果开发人员需要连接到不同的节点或端口,则可以在config.conf文件中对其进行修改。

启动 Wallet-CLI

java -jar wallet-cli.jar

启动后,可以在命令中以交互方式输入指令。导入私钥并检查余额是否正确。

Importwallet

<输入您自己的设置钱包密码2次>
<输入私钥: 

da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0>

Login

<输入您自己的钱包密码集>

Getbalance

合约部署

# 合约部署说明

DeployContract contract_name ABI byteCode constructor params isHex fee_limit consume_user_resource_percent origin_energy_limit value token_value token_id(e.g: TRXTOKEN, use # if don't provided) <library:address,library:address,...>

参数说明

参数
描述

contract_name

合约名称由您自己设定

ABI

从SimpleWebCompiler获得的ABI json数据

Bytecode

从SimpleWebCompiler获得的ABI json数据

Constructor

部署合同时, 将调用构造函数。如果需要调用它, 请填写构造函数的参数类型, 例如: constructor (uint256, string), 如果没有, 请填写一个字符#

Params

构造函数参数,以逗号分隔,例如1,“test”,如果没有构造函数,则填写一个字符#

isHex

输入参数是否转换为十六进制

fee_limit

此部署合同消耗的TRX的上限,以SUN为单位(1 SUN = 10 ^ -6 TRX),包括CPU资源消耗,STORAGE资源和可用余额。

consume_user_resource_percent

为使用此合同的用户指定的资源百分比是[0,100]之间的整数。如果为0,则表示用户不消耗资源。如果开发人员资源耗尽,将充分利用用户的资源。

origin_energy_limit

在合同调用期间开发人员消耗的开发人员设置的能量上限必须大于零。对于旧合同,未提供设置值的参数,它将保存为0,但将根据1000万能量限制计算。开发人员可以通过updateEnergyLimit接口重置该值。设置新值时,它必须大于0。

value

合同部署时转移到合同的金额。

token_value

传输TRC10代币的数量。

token_id

传输TRC10代币的TokenID。

library

地址,库:地址,......:如果合同包含库,则需要在部署合同期间指定库地址。如果没有库,则无需填写。

获取合同地址

您的智能合约地址将是:<contract address>

// 在这种情况下
您的智能合约地址为:TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6

调用合同来存储数据,查询数据

// 致电合约指示

TriggerContract contract_address method args isHex fee_limit value token_value token_id(e.g: TRXTOKEN, use # if don't provided)

// 参数说明

contract_address: 以前部署的合约的地址,格式为base58,例如:TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6
method: 调用的函数签名,如set(uint256,uint256)或fool(),参数用','分隔,不能有空格。
args: 如果它不是十六进制,则自然输入使用','split并且不能有空格。如果是十六进制,只需直接填写即可。
is_hex: 输入参数是十六进制,false还是true
fee_limit: 与deploycontract的情况类似,它表示此部署合约消耗的TRX的上限。单位为SUN(1 SUN = 10 ^ -6 TRX),包括CPU资源消耗,STORAGE资源和可用余额。
value: 合约部署时转移到合约的金额
token_value: 传输TRC10代币的数量。
token_id: 传输TRC10代币的TokenID。

// 例子
Set Mapping 1 -> 1
triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 set(uint256,uint256) 1,1 false 1000000 0 0 #

// Take the value of mapping key = 1
triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 get(uint256) 1 false 1000000  0000000000000000000000000000000000000000000000000000000000000000

如果调用的函数是常量或视图,则wallet-cli直接返回结果。如果包含库,则需要在部署合同之前部署库。部署库后,您知道库地址并将地址填入库:地址,库:地址,....

例如,使用remix生成契约,字节码是

608060405234801561001057600080fd5b5061013f806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f75dac5a14610046575b600080fd5b34801561005257600080fd5b5061005b610071565b6040518082815260200191505060405180910390f35b600073<b>__browser/oneLibrary.sol.Math3__________<\b>634f2be91f6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156100d357600080fd5b505af41580156100e7573d6000803e3d6000fd5b505050506040513d60208110156100fd57600080fd5b81019080805190602001909291905050509050905600a165627a7a7230582052333e136f236d95e9d0b59c4490a39e25dd3a3dcdc16285820ee0a7508eb8690029

假设先前部署的库地址是:TSEJ29gnBkxQZR3oDdLdeQtQQykpVLSk54。然后,在部署时,您需要使用browser / oneLibrary.sol.Math3:TSEJ29gnBkxQZR3oDdLdeQtQQykpVLSk54作为deploycontract的参数。

设置DApp环境


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.