configuración común de trufa

desplegar comando

Despliegue inicial: truffle migrate

Redistribuir:truffle migrate --reset

archivo de despliegue

modificar primero./migrations/2_initial_migration.js

Tenga en cuenta que los nombres de archivo tienen prefijos con números y sufijos con descripciones. Para registrar si la migración se realizó correctamente, se requiere un prefijo numerado. El sufijo es puramente para la legibilidad y comprensión humana.

1. Configuración básica

artefactos.require()

Al comienzo de la migración, le decimos a Truffle con qué contratos queremos interactuar a través del método artefactos.require(). Este método es similar a lo que requiere Node, pero en nuestro caso devuelve específicamente un contrato abstracto que podemos usar en el resto del script de implementación. El nombre especificado debe coincidir con el nombre definido por el contrato en este archivo fuente. No se pasa el nombre del archivo de origen, ya que un archivo puede contener varios contratos. Ejemplo:

// fileName: ./contracts/Contracts.sol
contract ContractOne { // ... }

contract ContractTwo { // ... }

ContractTwoSi lo escribes así en tu contrato artifacts.require():

var ContractTwo = artifacts.require("ContractTwo");

Si quieres usar ambos:

var ContractOne = artifacts.require("ContractOne");
var ContractTwo = artifacts.require("ContractTwo");

módulo.exportaciones

Todas las migraciones deben exportar funciones a través de la sintaxis module.exports. La función exportada por cada migración debe aceptar un objeto de implementación como primer argumento . Este objeto ayuda a la implementación al proporcionar una sintaxis clara para implementar contratos inteligentes, además de realizar algunas de las responsabilidades más mundanas de la implementación, como guardar los artefactos implementados para su uso posterior. El objeto Deployer es la interfaz principal para preparar las tareas de implementación y su API se describe en la parte inferior de esta página.

Migración inicial

Estos dos archivos deben conservarse contracts/Migrations.sol en  el  marco  Truffle ,migrations/1_initial_migration.js

Al implementar, el contrato se implementará primero.

2. Implementador

Su archivo de implementación utilizará el implementador para completar la tarea de implementación. Por lo tanto, puede escribir tareas de implementación de forma síncrona y se ejecutarán en el orden correcto:

// 先部署A再部署B,两者直接无直接联系
deployer.deploy(A);
deployer.deploy(B);
// 部署A后把A的地址作为参数再部署B
deployer.deploy(A).then(function() {
  return deployer.deploy(B, A.address);
});

Hay instrucciones detalladas de la documentación de la API más adelante.

3. Configuración de red

Los pasos de implementación se pueden ejecutar de forma condicional en función de la red en la que se implementan. Esta es una función avanzada, así que revise la sección "Redes" antes de continuar.

Para realizar los pasos de implementación de forma condicional, escriba sus migraciones para que acepten un segundo parámetro, denominado Red. ejemplo:

module.exports = function(deployer, network) {
  if (network == "live") {
    // Do something specific to the network named "live".
  } else {
    // Perform a different step otherwise.
  }
}

4. Seleccione una cuenta

La migración también pasa la lista de cuentas que le proporcionó el cliente de Ethereum y el proveedor web3 para que las use durante la implementación. Esta es web3.eth.getAccounts()la misma lista de cuentas de la que se devolvió.

module.exports = function(deployer, network, accounts) {
  // Use the accounts within your migrations.
}

5.Deployer.API

El implementador incluye muchas funciones que se pueden usar para simplificar la migración.

deployment.deploy

deployer.deploy(contract, args..., options)

Implementa un contrato específico especificado por un objeto de contrato con argumentos de constructor opcionales. Esto es útil para contratos singleton, por lo que solo existe una Esto establecerá la dirección del contrato después de la implementación (es decir, Contract.address será igual a la nueva dirección implementada) y sobrescribirá cualquier dirección anterior almacenada.

Puede optar por pasar una serie de contratos o una serie para acelerar la implementación de múltiples contratos. Además, el último parámetro es un objeto opcional que puede contener una clave denominada sobrescribir, así como otros parámetros de transacción, como gas y from. Si sobrescribir se establece en falso, el implementador no implementará este contrato (si ya se implementó). Esto es útil en algunos casos en los que la dirección del contrato la proporciona una dependencia externa.

Tenga en cuenta que primero debe implementar y vincular las bibliotecas de las que depende su contrato antes de llamar a deployment. Consulte la función de enlace a continuación para obtener más detalles.

Consulte la documentación del contrato de trufas para obtener más información .

// 在没有构造函数参数的情况下部署单个合约
deployer.deploy(A);

// 使用构造函数参数部署单个合同
deployer.deploy(A, arg1, arg2, ...);

// 如果已经部署了此合同,请不要部署它
deployer.deploy(A, {overwrite: false});

//为部署设置最大Gas 和 “from” 地址
deployer.deploy(A, {gas: 4612388, from: "0x...."});

// Deploy multiple contracts, some with arguments and some without.
// This is quicker than writing three `deployer.deploy()` statements as the deployer
// can perform the deployment as a single batched request.
deployer.deploy([
  [A, arg1, arg2, ...],
  B,
  [C, arg1]
]);

// External dependency example:
//
// For this example, our dependency provides an address when we're deploying to the
// live network, but not for any other networks like testing and development.
// When we're deploying to the live network we want it to use that address, but in
// testing and development we need to deploy a version of our own. Instead of writing
// a bunch of conditionals, we can simply use the `overwrite` key.
deployer.deploy(SomeDependency, {overwrite: false});

deployment.link

deployer.link(library, destinations)

Vincule una biblioteca implementada a un contrato o contratos. El destino puede ser un único contrato o una serie de múltiples contratos. Si algún contrato dentro del destino no depende de la biblioteca enlazada, el contrato será ignorado.

// Deploy library LibA, then link LibA to contract B, then deploy B.
deployer.deploy(LibA);
deployer.link(LibA, B);
deployer.deploy(B);

// Link LibA to many contracts
deployer.link(LibA, [B, C, D]);

deployment.then

deployer.then(function() {...})

Al promiseigual que , ejecute pasos de implementación arbitrarios. Utilice esta opción para llamar a funciones de contrato específicas durante la migración para agregar, editar y reorganizar datos de contrato.

var a, b;
deployer.then(function() {
  // Create a new version of A
  return A.new();
}).then(function(instance) {
  a = instance;
  // Get the deployed instance of B
  return B.deployed();
}).then(function(instance) {
  b = instance;
  // Set the new instance of A's address on B via B's setA() function.
  return b.setA(a.address);
});

Implementar otras configuraciones

surco

Configuración del compilador:

compilers: {
	solc: {
		version: "0.5.1",
		settings: {
       		optimizer: {
         		enabled: true,
         		runs: 200,
       		}}}}

billetera

En el archivo de configuración del proyecto truffle.js en el directorio raíz del proyecto , puede usar semillas para implementar contratos en la red principal o en la red de prueba. Lo siguiente proporciona una configuración para implementar en la red de pruebarinkeby

const HDWalletProvider = require('truffle-hdwallet-provider');
const fs = require('fs');
// 读取种子,12个单词组成的种子
const mnemonic = fs.readFileSync("./path/to/mnemonic.secret").toString().trim();

module.exports ={
    networks:{
        rinkebyTest:{
        	provider: () => new HDWalletProvider(
        		mnemonic, 
        		`https://rinkeby.infura.io/v3/aa86f***60803c`,// your infura API key
        		0, // 地址的起始索引
        		10 // 生成的地址数量
      		),
      		network_id: 4,
      		// gas: 6500000,
      		confirmations: 2,
      		gasPrice: 5000000000, // 5 Gwei
      		skipDryRun: true // 跳过预执行,直接部署
        }
    }
}

Notas de estudio de trufas (1) Comandos básicos y configuración - Blog de JustinQP - Blog de CSDN

Supongo que te gusta

Origin blog.csdn.net/u013288190/article/details/123853814
Recomendado
Clasificación