Anstatt zu verwenden truffle deploy
, möchte ich mein eigenes Skript erstellen deploy.js
und es mit ausführen node deploy.js
.
Wie kann ich die Klassen/Funktionen artifacts
, describe
und importieren it
, damit wir das so machen können:
var Foo = artifacts.require('./Foo');
describe('Deploying', async () => {
it('Deploying Foo', async () => {
let foo = await Foo.new()
})
})
describe
Für diesen speziellen Zweck brauchen Sie nicht it
usw.
Diese Entitäten sind Teil des Mocha-Frameworks und zum Testen bestimmt, nicht für die Produktion.
Für die Bereitstellung können Sie einfach Ihren Code schreiben und ihn mit NodeJS ausführen.
Beachten Sie, dass Sie es selbst instanziieren und instanziieren müssen require(web3)
, da Truffle nicht mehr "da" sein wird, um es für Sie zu tun.
web3
Beachten Sie auch, dass Sie Ihrer npm
Installationsdatei ( ) hinzufügen müssen package.json
, damit Sie sie importieren können.
Beachten Sie auch, dass Sie zwar wahrscheinlich die neueste Version dieses Moduls installieren möchten (derzeit web3@1.0.0-beta.34
), Truffle jedoch weiterhin web3@0.18.4
. Und leider gibt es viele Breaking Changes zwischen den beiden Versionen, so dass Sie anders interagieren müssen, web3
als Sie es wahrscheinlich gewohnt sind (es sei denn, Sie halten sich an web3@0.18.4
Ihre npm
Installationsdatei).
Hier ist ein Beispiel für ein Bereitstellungsskript mit web3@1.0.0-beta.34
:
let fs = require("fs");
let Web3 = require("web3");
let CLIENT_URL = process.argv[2];
let GAS_PRICE = process.argv[3];
let OWNER_ADDRESS = process.argv[4];
let OWNER_PASSWORD = process.argv[5];
let web3 = new Web3(new Web3.providers.HttpProvider(CLIENT_URL));
async function call(transaction) {
let success = await web3.eth.personal.unlockAccount(OWNER_ADDRESS, OWNER_PASSWORD);
let gas = await transaction.estimateGas({from: OWNER_ADDRESS, gasPrice: GAS_PRICE});
return await transaction.call({from: OWNER_ADDRESS, gasPrice: GAS_PRICE, gas: gas});
}
async function send(transaction) {
let success = await web3.eth.personal.unlockAccount(OWNER_ADDRESS, OWNER_PASSWORD);
let gas = await transaction.estimateGas({from: OWNER_ADDRESS, gasPrice: GAS_PRICE});
return await transaction.send({from: OWNER_ADDRESS, gasPrice: GAS_PRICE, gas: gas});
}
async function deploy(contractName, contractArgs) {
let abi = fs.readFileSync("../build/binaries/" + contractName + ".abi").toString();
let bin = fs.readFileSync("../build/binaries/" + contractName + ".bin").toString();
let contract = new web3.eth.Contract(JSON.parse(abi));
let handle = await send(contract.deploy({data: "0x" + bin, arguments: contractArgs}));
console.log(`${contractName} contract deployed at address ${handle._address}`);
return handle;
}
async function run() {
let arg1 = ...;
let arg2 = ...;
let arg3 = ...;
let myContract = await deploy("MyContract", [arg1, arg2]);
let retval = await call(myContract.methods.func1(arg3));
let receipt = await send(myContract.methods.func2(arg3));
}
run();