说明:
环境使用ubuntu1804-desktop版本。
1) Truffle
Truffle 是最流行的开发框架,能够在本地编译、部署智能合约,使命是让开发更容易。
Truffle 需要以太坊客户端支持,需要支持标准的JSON RPC API。
2)Ganache
Ganache可以快速启动个人以太坊区块链,并可以使用它来运行测试,执行命令、检查状态,同时控制链条的运行方式。
通过ganache可以快速查看所有账户的当前状态,包括他们的地址、私钥、交易和余额,查看Ganache内部区块链的日志输出,包括响应和其他重要的调试信息,检查所有块和交易,以获取相关问题的信息。
Ganache前身即为testrpc,即将testrpc做成界面化。
1) 安装truffle
apt-get install nodejs
apt-get install npm
npm install -g truffle
# truffle version
Truffle v4.1.14 (core: 4.1.14)
Solidity v0.4.24 (solc-js)
2) 安装ganache web版本
mkdir -p /home/lyh/003_ganache/
cd /home/lyh/003_ganache/
wget https://github.com/trufflesuite/ganache/releases/download/v1.2.2/ganache-1.2.2-x86_64.AppImage
chmod +x ganache-1.2.2-x86_64.AppImage
执行 ./ chmod +x ganache-1.2.2-x86_64.AppImage 即可将ganache运行起来。
更多版本见:https://github.com/trufflesuite/ganache/releases
mkdir -p /home/lyh/002_truffle/mycoin
cd /home/lyh/002_truffle/mycoin
truffle unbox tutorialtoken
npm install openzeppelin-solidity
内容如下,ERC20.sol是一个标准代币模板
# cat contracts/TutorialToken.sol pragma solidity ^0.4.24;
import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
contract TutorialToken is ERC20 { string public name = "TutorialToken"; string public symbol = "TT"; uint8 public decimals = 2; uint public INITIAL_SUPPLY = 12000;
constructor() public { _mint(msg.sender, INITIAL_SUPPLY); } } |
这个地方就是智能合约的类名、文件名需要保持一致,不然会导致部署失败。
# cat migrations/2_deploy_contracts.js var TutorialToken = artifacts.require("./TutorialToken.sol");
module.exports = function(deployer) { deployer.deploy(TutorialToken); }; |
truffle compile
./ ganache-1.2.2-x86_64.AppImage
truffle中的port要与ganache中端口一致,当前是7545
# cat truffle.js module.exports = { // See // for more about customizing your Truffle configuration! networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*" // Match any network id } } }; |
这个文件中默认的HttpProvider的端口是9545,会导致代币无法获取。
initWeb3: function() { // Initialize web3 and set the provider to the testRPC. if (typeof web3 !== 'undefined') { App.web3Provider = web3.currentProvider; web3 = new Web3(web3.currentProvider); } else { // set the provider you want from Web3.providers //App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545'); App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:7545'); web3 = new Web3(App.web3Provider); }
return App.initContract(); }, |
默认的https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js由于无法访问国外而导致无法获取代币数量,替换成官网的路径。
# truffle migrate --reset Using network 'development'.
Running migration: 1_initial_migration.js Replacing Migrations... ... 0x71626190150d848374aa0ed680e123b8307d2c09e8d6e943550e77ec691d6c11 Migrations: 0x4bea8091d3ff6589bd7193cd04c1e31b37c3aea6 Saving successful migration to network... ... 0xe616eddc312bc94879291caf9294058eff656520b51386a065b7976c4399df56 Saving artifacts... Running migration: 2_deploy_contracts.js Replacing TutorialToken... ... 0x60f3b3f2b92c6e80d9d4d9ffcc7af59b8538b17936cee078d64c4b09073fb94a TutorialToken: 0x538f4db70fd6f3b6dbdde7a3ca41b4d3aaa90e9f Saving successful migration to network... ... 0x00ab482034f971e78feb9ec07e7c2b4bdd2e5197a334cee62efa91252758a71f Saving artifacts... |
由于默认的firewall装完metamask一直无法登陆,所以使用chrome。
wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
apt-get update
apt-get install google-chrome-stable
我使用的是:
MetaMask_v3.9.5.crx
(http://www.onlinedown.net/soft/1194708.htm)
选择more tools/extensions,然后将下载的插件拖过去即可(需要选择开发者模式)。
会在浏览器中多一个狐狸的标识
在ganache的设置界面中
将红框中的字体复制到metamask的wallet seed,设置用户密码即可。
如图,可以通过点击+,与获取ganache中的私钥来导入账号。
点击如下位置
可以看到ganache中的余额同步过来
npm run dev
复制ganache中第二个账号的地址,并转移200个代币
5.8 最终账号1代币数量减少
可以在metamask中导入第二个账号,然后刷新 localhost:3000,可以看到代币的数量变为200。
官网:
https://truffleframework.com/tutorials/robust-smart-contracts-with-openzeppelin
metamask的配置:
https://truffleframework.com/tutorials/pet-shop#interacting-with-the-dapp-in-a-browser
一些遇到的问题:
https://blog.csdn.net/weixin_42350212/article/details/80753328