Cómo importar artefactos, describirlo desde Truffle

En lugar de usar truffle deploy, quiero crear mi propio deploy.jsscript y ejecutarlo usando node deploy.js.

¿Cómo puedo importar las clases/funciones y artifacts, para que podamos hacer lo siguiente?describeit

var Foo = artifacts.require('./Foo');

describe('Deploying', async () => {
    it('Deploying Foo', async () => {
        let foo = await Foo.new()   
    })  
})

Respuestas (1)

No necesita describe, ity así sucesivamente, para este propósito específico.

Estas entidades son parte de Mocha Framework , designadas para pruebas, no para producción.

Para la implementación, simplemente puede escribir su código y ejecutarlo con NodeJS.

Tenga en cuenta que tendrá que require(web3)crear una instancia usted mismo, ya que Truffle ya no "estará allí" para hacerlo por usted.

También tenga en cuenta que tendrá que agregar web3a su npmarchivo de instalación ( package.json), para que pueda importarlo.

También tenga en cuenta que aunque probablemente desee instalar la última versión de este módulo (actualmente web3@1.0.0-beta.34), Truffle todavía usa web3@0.18.4. Y desafortunadamente, hay muchos cambios importantes entre las dos versiones, por lo que tendrá que interactuar con web3cosas diferentes a las que probablemente esté acostumbrado (a menos que se ciña a web3@0.18.4su npmarchivo de instalación).

Aquí hay un ejemplo de un script de implementación usando 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();