如何使用 Truffle 在 ThunderCore 上部署合约?
How do I use Truffle to deploy a contract on ThunderCore?
如何使用 Truffle 在 ThunderCore 上部署合约?
它与在以太坊上使用松露一样吗?如何设置配置?有没有文献或资源可以参考?
将您的 Truffle 项目设置为:
- 使用
@truffle/hdwallet-provider
and point it at https://mainnet-rpc.thundercore.com
- 将
byzantium
设置为Solidity编译器的目标EVM版本
- 见下文
truffle-config.js
中的 evnVersion
- 截至 2020 年 4 月,ThunderCore 支持
byzantium
独立的项目模板
package.json
{
"name": "field-support",
"version": "0.0.1",
"main": "trufflej-config.js",
"license": "LicenseRef-COPYING",
"directories": {
"test": "test"
},
"dependencies": {
"json5": "^2.1.0",
"truffle": "^5.1.22",
"@truffle/hdwallet-provider": "^1.0.34"
},
"scripts": {
"test": "truffle test",
"migrate": "truffle migrate",
"deploy": "truffle migrate",
"compile": "truffle compile",
"build": "truffle build",
"lint": "solium -d contracts && eslint ."
},
"keywords": [
"smart contract"
],
"author": ""
}
truffle-config.js
const HDWalletProvider = require("@truffle/hdwallet-provider");
const fs = require("fs");
const MAINNET_PROVIDER = "https://mainnet-rpc.thundercore.com";
let privateKeys = null;
let mnemonic = null;
try {
privateKeys = fs
.readFileSync(".private-keys", { encoding: "ascii" })
.split("\n")
.filter(x => x.length > 0);
} catch (err) {
if (err.code !== "ENOENT") {
throw err;
}
}
if (!privateKeys) {
try {
mnemonic = fs.readFileSync(".mnemonic", { encoding: "ascii" }).trim();
} catch (err) {
if (err.code !== "ENOENT") {
throw err;
}
}
}
module.exports = {
networks: {
// For `truffle develop`
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 9545, // Standard Ethereum port (default: none)
network_id: "*" // Any network (default: none)
},
"thunder-mainnet": {
provider: () => {
if (privateKeys === null && mnemonic === null) {
throw new Error("Please create a .private-keys or .mnemonic file");
}
return privateKeys
? new HDWalletProvider(
privateKeys,
MAINNET_PROVIDER,
0, // <- change address_index if you want to use non-first address
privateKeys.length
)
: new HDWalletProvider(
mnemonic,
MAINNET_PROVIDER,
0 // <- change address_index if you want to use non-first address
);
},
network_id: "108"
}
},
// Set default mocha options here, use special reporters etc.
mocha: {
// timeout: 100000
},
// Configure your compilers
compilers: {
solc: {
version: "0.5.9", // Fetch exact version from solc-bin (default: truffle's version)
settings: {
// see the solidity docs for advice about optimization and evmversion
optimizer: {
enabled: true,
runs: 200
},
evmVersion: "byzantium" // Current evm on ThunderCore fixed at "byzantium"
}
}
}
};
contracts/SimplStorage.sol
pragma solidity ^0.5;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
migrations/2_deploy.js
const SimpleStorage = artifacts.require('SimpleStorage');
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
};
示例会话
- 创建a wallet in Metamask
- 通过 ThunderCore 获取 Thunder Tokens (TT) Mainnet Faucet
- 导出私钥并将其保存到
.private-keys
文件
- 运行
truffle migrate --network thunder-mainnet
:
$ truffle migrate --network thunder-mainnet
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'thunder-mainnet'
> Network id: 108
> Block gas limit: 0x5f5e100
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> transaction hash: 0x4d943a338d683d7ba0dc4937417b4b795b4791849b4695aeddb8811bdb265183
> Blocks: 5 Seconds: 6
> contract address: 0xFAc8a9a57cb2C70059D603f393F4A4f830C43a34
(...)
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00554924 ETH
2_deploy.js
===========
Deploying 'SimpleStorage'
-------------------------
> transaction hash: 0x8a6063fa9dd74935e0db262a03ffee38181e383e3d73dd408cc76730e79ac135
> Blocks: 5 Seconds: 6
> contract address: 0x75F89Ba793DDFFCA4b604Ae8B28E8DfD8Dbbe14a
(...)
您可以在 field-support
存储库的 simple-storage
分支中找到代码 here。
如何使用 Truffle 在 ThunderCore 上部署合约? 它与在以太坊上使用松露一样吗?如何设置配置?有没有文献或资源可以参考?
将您的 Truffle 项目设置为:
- 使用
@truffle/hdwallet-provider
and point it at https://mainnet-rpc.thundercore.com - 将
byzantium
设置为Solidity编译器的目标EVM版本- 见下文
truffle-config.js
中的evnVersion
- 截至 2020 年 4 月,ThunderCore 支持
byzantium
- 见下文
独立的项目模板
package.json
{
"name": "field-support",
"version": "0.0.1",
"main": "trufflej-config.js",
"license": "LicenseRef-COPYING",
"directories": {
"test": "test"
},
"dependencies": {
"json5": "^2.1.0",
"truffle": "^5.1.22",
"@truffle/hdwallet-provider": "^1.0.34"
},
"scripts": {
"test": "truffle test",
"migrate": "truffle migrate",
"deploy": "truffle migrate",
"compile": "truffle compile",
"build": "truffle build",
"lint": "solium -d contracts && eslint ."
},
"keywords": [
"smart contract"
],
"author": ""
}
truffle-config.js
const HDWalletProvider = require("@truffle/hdwallet-provider");
const fs = require("fs");
const MAINNET_PROVIDER = "https://mainnet-rpc.thundercore.com";
let privateKeys = null;
let mnemonic = null;
try {
privateKeys = fs
.readFileSync(".private-keys", { encoding: "ascii" })
.split("\n")
.filter(x => x.length > 0);
} catch (err) {
if (err.code !== "ENOENT") {
throw err;
}
}
if (!privateKeys) {
try {
mnemonic = fs.readFileSync(".mnemonic", { encoding: "ascii" }).trim();
} catch (err) {
if (err.code !== "ENOENT") {
throw err;
}
}
}
module.exports = {
networks: {
// For `truffle develop`
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 9545, // Standard Ethereum port (default: none)
network_id: "*" // Any network (default: none)
},
"thunder-mainnet": {
provider: () => {
if (privateKeys === null && mnemonic === null) {
throw new Error("Please create a .private-keys or .mnemonic file");
}
return privateKeys
? new HDWalletProvider(
privateKeys,
MAINNET_PROVIDER,
0, // <- change address_index if you want to use non-first address
privateKeys.length
)
: new HDWalletProvider(
mnemonic,
MAINNET_PROVIDER,
0 // <- change address_index if you want to use non-first address
);
},
network_id: "108"
}
},
// Set default mocha options here, use special reporters etc.
mocha: {
// timeout: 100000
},
// Configure your compilers
compilers: {
solc: {
version: "0.5.9", // Fetch exact version from solc-bin (default: truffle's version)
settings: {
// see the solidity docs for advice about optimization and evmversion
optimizer: {
enabled: true,
runs: 200
},
evmVersion: "byzantium" // Current evm on ThunderCore fixed at "byzantium"
}
}
}
};
contracts/SimplStorage.sol
pragma solidity ^0.5;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
migrations/2_deploy.js
const SimpleStorage = artifacts.require('SimpleStorage');
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
};
示例会话
- 创建a wallet in Metamask
- 通过 ThunderCore 获取 Thunder Tokens (TT) Mainnet Faucet
- 导出私钥并将其保存到
.private-keys
文件 - 运行
truffle migrate --network thunder-mainnet
:
$ truffle migrate --network thunder-mainnet
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'thunder-mainnet'
> Network id: 108
> Block gas limit: 0x5f5e100
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> transaction hash: 0x4d943a338d683d7ba0dc4937417b4b795b4791849b4695aeddb8811bdb265183
> Blocks: 5 Seconds: 6
> contract address: 0xFAc8a9a57cb2C70059D603f393F4A4f830C43a34
(...)
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00554924 ETH
2_deploy.js
===========
Deploying 'SimpleStorage'
-------------------------
> transaction hash: 0x8a6063fa9dd74935e0db262a03ffee38181e383e3d73dd408cc76730e79ac135
> Blocks: 5 Seconds: 6
> contract address: 0x75F89Ba793DDFFCA4b604Ae8B28E8DfD8Dbbe14a
(...)
您可以在 field-support
存储库的 simple-storage
分支中找到代码 here。