使用truffle构建ERC20代币

使用truffle+openzeppelin构建ERC20代币

昨天说不用truffle来着,想着remix蛮好的。
今天。 艾玛真香~

Error:Could not find artifacts for MetaCoin from any sources

原来migration文件夹下的js文件是需要排序的。
所以命名格式不能乱1_xx_xx.js后面随意。

后面几个报错就不说了,都是这种比较粗心的。

1.安装openzeppelin

在GitHub上这个已经0.6.0了,但是npm安装下来是0.4.x的。

npm install zeppelin-solidity

2.需要在truffle-config.js中配置版本

  compilers: {
    solc: {
      version: "^0.4.24",    // Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      // settings: {          // See the solidity docs for advice about optimization and evmVersion
      //  optimizer: {
      //    enabled: false,
      //    runs: 200
      //  },
      //  evmVersion: "byzantium"
      // }
    }
  }

3.创建合约和对应js

pragma solidity ^0.4.24;
import "../node_modules/zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";

contract coin is StandardToken {
  string public name = "pcl";
  string public symbol = "pcl";
  uint8 public decimals = 18;
  uint256 public INITIAL_SUPPLY = 888888;
  constructor() public{
    totalSupply();
    balances[msg.sender] = INITIAL_SUPPLY;
  }
}
//文件名:1_deploy_coin,因为我把初始文件删了。
var coin = artifacts.require("./coin.sol");

module.exports = function(deployer) {
  deployer.deploy(coin);
};

4.编译和测试

编译:

truffle compile

再进入develop下(当然也可以进去在编译)

truffle develop

然后部署

migration

几个常用命令:

account	//这个是直接打印出当前账户

migrate --reset		//重新部署(不知道可以reset时候我就每次都要出去compile一遍。心态崩了。)

coin.deployed().then(t => con = t); 	//创建合约实例为con

con.func()//调用函数

con.func.call()	//没有pure的时候需要call

听说Windows那个terminal好像很强:
https://github.com/microsoft/terminal

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用JavaScript实现基于ERC20标准的多签授权的示例代码: ```javascript const Web3 = require('web3'); const contract = require('truffle-contract'); const erc20Abi = require('path/to/erc20-abi.json'); const multisigAbi = require('path/to/multisig-abi.json'); const web3Provider = new Web3.providers.HttpProvider('http://localhost:8545'); // 这里使用本地以太坊节点 const web3 = new Web3(web3Provider); // 代币合约地址和多签合约地址 const tokenAddress = '0x...'; // 代币合约地址 const multisigAddress = '0x...'; // 多签合约地址 // 实例化ERC20代币合约和多签合约 const erc20 = contract({ abi: erc20Abi }); const multisig = contract({ abi: multisigAbi }); erc20.setProvider(web3Provider); multisig.setProvider(web3Provider); // 多签授权函数 const approveFromMultisig = async (spender, value, privateKey) => { // 获取代币合约实例 const tokenInstance = await erc20.at(tokenAddress); // 获取多签合约实例 const multisigInstance = await multisig.at(multisigAddress); // 获取管理员账户地址 const accounts = await web3.eth.getAccounts(); const adminAddress = accounts[0]; // 构造交易数据 const data = await tokenInstance.methods.approve(spender, value).encodeABI(); const nonce = await multisigInstance.nonce(); const destination = tokenAddress; const valueToSend = 0; // 生成交易哈希 const hash = web3.utils.soliditySha3( { t: 'address', v: multisigAddress }, { t: 'uint256', v: nonce }, { t: 'address', v: destination }, { t: 'uint256', v: valueToSend }, { t: 'bytes', v: data } ); // 签名交易 const signature = await web3.eth.accounts.sign(hash, privateKey); // 发送多签交易 await multisigInstance.execute(destination, valueToSend, data, signature.v, signature.r, signature.s, { from: adminAddress }); console.log(`Approved ${value} tokens for ${spender} from multisig contract.`); }; // 测试多签授权函数 const test = async () => { const spender = '0x...'; // 接收转账的地址 const value = 1000; // 授权的数量 const privateKey = '0x...'; // 多签管理员的私钥 await approveFromMultisig(spender, value, privateKey); }; test(); ``` 这个示例代码使用了 `truffle-contract` 来实例化ERC20代币合约和多签合约,并使用以太坊的Web3.js库来构造交易和签名。需要注意的是,这个示例代码仅供参考,实际使用时需要根据具体情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值