建一个文件夹
mkdir truffle-project
truffle init //初始化
qinjianquan@MacBook-Pro-10 truffle-project % ls //查看文件
contracts test
migrations truffle-config.js
contracts 编写智能合约的文件夹
migrations 使用solidity编写智能合约的文件夹,编写文件解释truffle 如何部署智能合约,用的是node.js
Test 用来写测试文件,大多数使用的是node.js,也有一些使用的是Solidity
配置文件用来定义智能合约部署的网络
2.2 编写合约vim contracts/SimpleStorage.sol
pragma solidity ^0.8.4; //请注意solidity的版本问题,如果合约指定的版本和当前Solidity不兼容的话,这将会在编译的时候出错
contract SimpleStorage {
uint data;
function updateData(uint _data) external {
data = _data;
}
function readData() external view returns(uint) {
return data;
}
}
vim truffle-config.js //通过配置文件修改配置
truffle compile //编译
Compiling your contracts...
===========================
✓ Fetching solc version list from solc-bin. Attempt #1
✓ Downloading compiler. Attempt #1.
> Compiling ./contracts/Migrations.sol
> Compiling ./contracts/SimpleStorage.sol
> Compilation warnings encountered:
Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: " to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.
--> project:/contracts/SimpleStorage.sol
> Artifacts written to /Users/qinjianquan/truffle-project/build/contracts
> Compiled successfully using:
- solc: 0.8.13+commit.abaa5c0e.Emscripten.clang
qinjianquan@MacBook-Pro-10 truffle-project % ls //查看生成的json文件
build contracts migrations test truffle-config.js
qinjianquan@MacBook-Pro-10 truffle-project % ls build/contracts/
Migrations.json SimpleStorage.json
qinjianquan@MacBook-Pro-10 truffle-project % ls
build contracts migrations test truffle-config.js
qinjianquan@MacBook-Pro-10 truffle-project % ls build/contracts/
Migrations.json SimpleStorage.json
vim build/contracts/SimpleStorage.json //查看编译后的json文件以及一些其它编译合约的信息
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_data",
"type": "uint256"
}
],
"name": "uodateData",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "readData",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
--
2.3 测试
测试文件/合约都可以在vs code先编写,然后通过命令行工具部署和测试
vim test/SimpleStorage.js //编写测试文件
const SimpleStorage = artifacts.require('SimpleStorage');
contract('SimpleStorage', ()=> {
it ('Should update data',sync () => {
const storage = await SimpleStorage.new();
await storage.updateData(10);
const data = await storage.readData();
assert(data.toString() === '10');
});
});
qinjianquan@MacBook-Pro-10 truffle-project % truffle test 运行测试,此时的测试在本地的私有链Ganache上,非常简单方便
Using network 'test'.
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Contract: SimpleStorage
✔ Should update data (2093ms)
1 passing (2s)
2.4 部署合约
使用truffle部署合约将会部署在本地的区块链ganache上,ganache可以独立安装,但是当安装了truffle时,也会自动安装ganache
第一步:在migrations文件中创建migration文件
vim 2_deploy_contract.js
第二步:编译部署文件
const SimpleStorage = artifacts.require('SimpleStorage.sol');
module.exports = function (deployer) {
deployer.deploy(SimpleStorage);
};
第三步:启动ganache
qinjianquan@MacBook-Pro-10 truffle-project % truffle develop
Truffle Develop started at http://127.0.0.1:9545/ //本地区块链应运行的ip
//产生了10对公钥和私钥
Accounts:
(0) 0xfb7032b3fcffc0a41e96b99afd663a477819667c
(1) 0x6d5d77c220e16b941dbae18160ede44927ef0896
(2) 0x3b3400226108c3852517c92fbf77897f26f0ed22
(3) 0x0d84c5e7da17a1cc0c7ea80e542cc4510dd86031
(4) 0xbfe92d1c88a0ed13d810f6eb5895d9977a1344a2
(5) 0xbe1a8378aee4e12743165b7b734acd341dd9b7bb
(6) 0xab288c9e27360cb669fa0400a059c7cb832bb9fe
(7) 0xa0c0d996cae482689ec7e21773ae244706cd0568
(8) 0x9b75a563dd23bc0aacab738fe44699c6f059d4c4
(9) 0xeaf4ee109ec7e8021625472d39844e62d11e40d7
Private Keys:
(0) b0531e2f34c749fbe35e931729b0ea5fa8dc3e8c721959bff26b75072eab803f
(1) ea879baab63887baa9537b62720c46e0f91d18a0ba1e1f94a07e1738326a35f2
(2) 6d7c219ca62df4071c0ac20f649565671eea5d18074fa26553f4435ad6f3c232
(3) 3c190d33a159af8c4eea0dcde454f01f1b6c5c300245336c81274e8509dc8f42
(4) 3146aa207eb681981e4ff32c0ae2b7c4fdc394439a7c4749716a69780956b471
(5) 1690311f845117441480148ab3c3825b750946075dbf90caeb727a7532bb0f53
(6) 6359b8b4b912a83268db09b3b40d77bccfc2510acf1b8178142342d54818f5ef
(7) de988ee0c1d5ea7736710ca7ce131db1c388e53b2e40364547ac7c2f938e16c0
(8) d9474696f0680b2c195a62c3bec892eec8e9d58937076086ce8eee38568b277d
(9) 40b16ad4d62db2314bf397c4acfdb5edc6005c5c18020201a8d2767063439ebc
Mnemonic: rely spell ensure loan toss bitter tissue error pretty cactus eyebrow fantasy
⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.
第四步:部署合约
truffle(develop)> migrate --reset
-- //部署好合约的基本信息
2_deploy_contracts.js
=====================
Deploying 'SimpleStorage'
-------------------------
> transaction hash: 0xb77455f2770124ca686f3455fa37320c8f85210706ecc608dfe1eed99a376ae2
> Blocks: 0 Seconds: 0
> contract address: 0xEa914459CDe53Ebea8AdF4f86B26624B8b19f4aD
> block number: 3
> block timestamp: 1650762450
> account: 0xFb7032b3fcfFc0A41E96B99AFd663A477819667C
> balance: 99.998606050600155647
> gas used: 125653 (0x1ead5)
> gas price: 3.178366198 gwei
> value sent: 0 ETH
> total cost: 0.000399371247877294 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.000399371247877294 ETH
Summary
=======
> Total deployments: 2
> Final cost: 0.001243640997877294 ETH
第五步,在公共测试网络部署(使用binance smart chain)
注意,public test net 需要获取BNB
0xfb7032b3fcffc0a41e96b99afd663a477819667c //选择一个账户
https://testnet.binance.org/faucet-smart //获取测试所要用的BNB
https://testnet.bscscan.com/address/0xfb7032b3fcffc0a41e96b99afd663a477819667c //查看获取的BNB
vim truffle-config.js //回到终端修改配置文件
//引入依赖,能够让我们在主网或者测试网签名交易
const HDWalletProvider = require('@truffle/hdwallet-provider');
const privateKeys = ['0xb0531e2f34c749fbe35e931729b0ea5fa8dc3e8c721959bff26b75072eab803f'];
--
networks: {
--
//eth测试
eth:{
provider: () => new HDWalletProvider(
privateKeys,
'ETH_NODE_URL'
),
network_id:1,
skipDryRun:true
},
ethTestnet:{
provider: () => new HDWalletProvider(
privateKeys,
'ETH_NODE_URL'
),
network_id:5,
skipDryRun:true
},
//bsc 测试
bsc:{
provider: () => new HDWalletProvider(
privateKeys,
'https://bsc-dataseed.binance.org/'
),
network_id:56,
skipDryRun:true
},
bscTestnet:{
provider: () => new HDWalletProvider(
privateKeys,
'https://data-seed-prebsc-1-s1.binance.org:8545/'
),
network_id:97,
skipDryRun:true
}
},
--
},
在binance上部署,如下是合约部署好的结果
truffle migrate --reset --network bscTestnet //
qinjianquan@MacBook-Pro-10 truffle-project % truffle migrate --reset --network bscTestnet
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'bscTestnet'
> Network id: 97
> Block gas limit: 30000000 (0x1c9c380)
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> transaction hash: 0xa72186e9fadb8e678230d98c7c0ace69e0997f93909555d051ff28b78a6b8fb9
> Blocks: 1 Seconds: 4
> contract address: 0xdeC493327921499E17AE674dc7a18cB12D723b02
> block number: 18716980
> block timestamp: 1650766972
> account: 0xFb7032b3fcfFc0A41E96B99AFd663A477819667C
> balance: 0.99751146
> gas used: 248854 (0x3cc16)
> gas price: 10 gwei
> value sent: 0 ETH
> total cost: 0.00248854 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00248854 ETH
2_deploy_contracts.js
=====================
Deploying 'SimpleStorage'
-------------------------
> transaction hash: 0xef537e56844b148363b9e54ca7db8b1aa92d06c0ec28a9e02923dd80f4690f5f
> Blocks: 1 Seconds: 4
> contract address: 0xEa914459CDe53Ebea8AdF4f86B26624B8b19f4aD
> block number: 18716985
> block timestamp: 1650766987
> account: 0xFb7032b3fcfFc0A41E96B99AFd663A477819667C
> balance: 0.9958298
> gas used: 125653 (0x1ead5)
> gas price: 10 gwei
> value sent: 0 ETH
> total cost: 0.00125653 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00125653 ETH
Summary
=======
> Total deployments: 2
> Final cost:
注意:虽然合约部署在bsc上,但是显示仍旧以ETH结算,这是因为truffle是为eth设计的,我们实际上使用的是BNB
通过交易哈希,可以查看交易详情
http://www.kaotop.com/file/tupian/20220516/image-20220424103312941.png)]
2.5 与智能合约交互
使用truffle console
truffle console --network bscTestnet
truffle(bscTestnet)> storage = await SimpleStorage.deployed() //将合约定义为新的变量
undefined
truffle(bscTestnet)> storage.address //获取合约地址
'0xEa914459CDe53Ebea8AdF4f86B26624B8b19f4aD'
执行合约
truffle(bscTestnet)> await storage.updateData(10)
truffle(bscTestnet)> {
tx: '0x78e3317e91c89ae6100a25334d02b4a7375917702a7213afc997e4be34b3269c',
receipt: {
blockHash: '0xedd34370c0c6f7f2f193de112cb85c9414a4345e21e600bdb18860fb403d6a4d',
blockNumber: 18717394,
contractAddress: null,
cumulativeGasUsed: 823595,
from: '0xfb7032b3fcffc0a41e96b99afd663a477819667c',
gasUsed: 41602,
logs: [],
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
status: true,
to: '0xea914459cde53ebea8adf4f86b26624b8b19f4ad',
transactionHash: '0x78e3317e91c89ae6100a25334d02b4a7375917702a7213afc997e4be34b3269c',
transactionIndex: 9,
type: '0x0',
rawLogs: []
},
logs: []
}
https://testnet.bscscan.com/tx/0x78e3317e91c89ae6100a25334d02b4a7375917702a7213afc997e4be34b3269c //查看交易信息
Input Data:
# Name Type Data 0 _data uint256 10
data = storage.readData() //读取
BN { negative: 0, words: [ 10, <1 empty item> ], length: 1, red: null }
data = await storage.readData()
undefined
truffle(bscTestnet)> data.toString()//转化为字符串,更容易阅读
'10'
事实上,使用truffle develop命令,可以同时启动本地的区块链和进入console
qinjianquan@MacBook-Pro-10 truffle-project % truffle develop
Truffle Develop started at http://127.0.0.1:9545/
Accounts:
(0) 0xfb7032b3fcffc0a41e96b99afd663a477819667c
(1) 0x6d5d77c220e16b941dbae18160ede44927ef0896
(2) 0x3b3400226108c3852517c92fbf77897f26f0ed22
(3) 0x0d84c5e7da17a1cc0c7ea80e542cc4510dd86031
(4) 0xbfe92d1c88a0ed13d810f6eb5895d9977a1344a2
(5) 0xbe1a8378aee4e12743165b7b734acd341dd9b7bb
(6) 0xab288c9e27360cb669fa0400a059c7cb832bb9fe
(7) 0xa0c0d996cae482689ec7e21773ae244706cd0568
(8) 0x9b75a563dd23bc0aacab738fe44699c6f059d4c4
(9) 0xeaf4ee109ec7e8021625472d39844e62d11e40d7
Private Keys:
(0) b0531e2f34c749fbe35e931729b0ea5fa8dc3e8c721959bff26b75072eab803f
(1) ea879baab63887baa9537b62720c46e0f91d18a0ba1e1f94a07e1738326a35f2
(2) 6d7c219ca62df4071c0ac20f649565671eea5d18074fa26553f4435ad6f3c232
(3) 3c190d33a159af8c4eea0dcde454f01f1b6c5c300245336c81274e8509dc8f42
(4) 3146aa207eb681981e4ff32c0ae2b7c4fdc394439a7c4749716a69780956b471
(5) 1690311f845117441480148ab3c3825b750946075dbf90caeb727a7532bb0f53
(6) 6359b8b4b912a83268db09b3b40d77bccfc2510acf1b8178142342d54818f5ef
(7) de988ee0c1d5ea7736710ca7ce131db1c388e53b2e40364547ac7c2f938e16c0
(8) d9474696f0680b2c195a62c3bec892eec8e9d58937076086ce8eee38568b277d
(9) 40b16ad4d62db2314bf397c4acfdb5edc6005c5c18020201a8d2767063439ebc
Mnemonic: rely spell ensure loan toss bitter tissue error pretty cactus eyebrow fantasy
⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.
truffle(develop)>
进入本地console后,仍然可以执行在bscTestnet console 的内容
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)