Wie man Artefakte importiert, beschreibe es von Truffle

Anstatt zu verwenden truffle deploy, möchte ich mein eigenes Skript erstellen deploy.jsund es mit ausführen node deploy.js.

Wie kann ich die Klassen/Funktionen artifacts, describeund 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()   
    })  
})

Antworten (1)

describeFür diesen speziellen Zweck brauchen Sie nicht itusw.

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.

web3Beachten Sie auch, dass Sie Ihrer npmInstallationsdatei ( ) 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, web3als Sie es wahrscheinlich gewohnt sind (es sei denn, Sie halten sich an web3@0.18.4Ihre npmInstallationsdatei).

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();