它如何管理私钥松露?
How it manage private keys truffle?
我正在尝试在部署在 ropsten 中的 mi 自定义合约中发送令牌。此外,我正在使用 truffle 和 truffle-contract 1.1.11 库。我的疑问是,我应该如何在松露环境中签署交易?
另一方面,如果可能的话,我想知道 truffle 如何管理私钥,因为当我在本地 ganache 区块链上设置项目时,我的所有东西都能正常工作。当我尝试从不同于合约部署地址的另一个地址签署交易时,它只是神奇地来宾私钥。这当然是在 ganache 中,但问题是在 ropsten 中。
pragma solidity ^0.5.0;
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Pausable.sol";
contract CustomToken is ERC20Pausable, ERC20Burnable, ERC20Mintable, ERC20Detailed {
constructor () public ERC20Detailed("CustomToken", "CT", 2) { }
// some functions who call super.function(), this reproduces default behavior of a base ERC20 token
}
const contract = require('truffle-contract');
const customtoken_artifact = require('../build/contracts/CustomToken.json');
let CustomToken = contract(customtoken_artifact);
module.exports = {
sendCoin: function(amount, sender, receiver, callback) {
let self = this;
CustomToken.setProvider(self.web3.currentProvider);
let custom;
CustomToken.deployed().then(function(instance) {
custom = instance;
return custom.transfer(receiver, amount, {from: sender});
}).then(() => callback("202"))
.catch(function(e) {
console.log(e);
callback("400 " + e);
});
},
};
最后,我希望知道 truffle 如何管理私钥或我应该何时签署交易。
要在 Truffle 中签署交易,您可以使用 HDWalletProvider
:
https://www.npmjs.com/package/@truffle/hdwallet-provider
您可以在 truffle-config.js
中进行配置
创建一个 truffle-config.js 文件:
require('dotenv').config();
let PrivateKeyProvider = require("truffle-privatekey-provider");
module.exports = {
networks: {
kovan: {
provider: new PrivateKeyProvider(process.env.KOVAN_PK, process.env.KOVAN_PROVIDER),
network_id: 42,
from: process.env.KOVAN_ACCOUNT,
gas: 8000000
},
},
// Set default mocha options here, use special reporters etc.
mocha: {
timeout: 100000
},
// Configure your compilers
compilers: {
solc: {
version: "0.5.12",
}
},
};
然后您可以将提供商、帐户和私钥存储在一个名为 .env
的文件中:
# Kovan Test Network
KOVAN_PROVIDER=https://kovan.infura.io/v3/76b...
KOVAN_ACCOUNT=0xE...
KOVAN_PK=1a..
我正在尝试在部署在 ropsten 中的 mi 自定义合约中发送令牌。此外,我正在使用 truffle 和 truffle-contract 1.1.11 库。我的疑问是,我应该如何在松露环境中签署交易?
另一方面,如果可能的话,我想知道 truffle 如何管理私钥,因为当我在本地 ganache 区块链上设置项目时,我的所有东西都能正常工作。当我尝试从不同于合约部署地址的另一个地址签署交易时,它只是神奇地来宾私钥。这当然是在 ganache 中,但问题是在 ropsten 中。
pragma solidity ^0.5.0;
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Pausable.sol";
contract CustomToken is ERC20Pausable, ERC20Burnable, ERC20Mintable, ERC20Detailed {
constructor () public ERC20Detailed("CustomToken", "CT", 2) { }
// some functions who call super.function(), this reproduces default behavior of a base ERC20 token
}
const contract = require('truffle-contract');
const customtoken_artifact = require('../build/contracts/CustomToken.json');
let CustomToken = contract(customtoken_artifact);
module.exports = {
sendCoin: function(amount, sender, receiver, callback) {
let self = this;
CustomToken.setProvider(self.web3.currentProvider);
let custom;
CustomToken.deployed().then(function(instance) {
custom = instance;
return custom.transfer(receiver, amount, {from: sender});
}).then(() => callback("202"))
.catch(function(e) {
console.log(e);
callback("400 " + e);
});
},
};
最后,我希望知道 truffle 如何管理私钥或我应该何时签署交易。
要在 Truffle 中签署交易,您可以使用 HDWalletProvider
:
https://www.npmjs.com/package/@truffle/hdwallet-provider
您可以在 truffle-config.js
创建一个 truffle-config.js 文件:
require('dotenv').config();
let PrivateKeyProvider = require("truffle-privatekey-provider");
module.exports = {
networks: {
kovan: {
provider: new PrivateKeyProvider(process.env.KOVAN_PK, process.env.KOVAN_PROVIDER),
network_id: 42,
from: process.env.KOVAN_ACCOUNT,
gas: 8000000
},
},
// Set default mocha options here, use special reporters etc.
mocha: {
timeout: 100000
},
// Configure your compilers
compilers: {
solc: {
version: "0.5.12",
}
},
};
然后您可以将提供商、帐户和私钥存储在一个名为 .env
的文件中:
# Kovan Test Network
KOVAN_PROVIDER=https://kovan.infura.io/v3/76b...
KOVAN_ACCOUNT=0xE...
KOVAN_PK=1a..