Estoy usando trufa para implementar un conjunto de contratos inteligentes.
Estos contratos deben financiarse con un token ERC20 (LINK). La cuenta que está implementando los contratos tiene LINK y debe transferir una cantidad al contrato.
const DemoNFT = artifacts.require("./DemoNFT.sol"); const IdentityProvider = artifacts.require("./IdentityProvider.sol"); const Web3 = require("web3"); const allConfigs = require("../config.json"); const linkABI = require("../abi/link.abi"); module.exports = async function(deployer, network) { const config = allConfigs[network.replace(/-fork$/, '')] || allConfigs.default; const provider = await IdentityProvider.deployed(); const linkToken = new web3.eth.Contract(linkABI, config.token); for (let i = 0; i < config.nfts.length; i++) { const settings = config.nfts[i]; await deployer.deploy(DemoNFT, settings.name, settings.symbol); const nft = await DemoNFT.deployed(); await nft.setupVerification(provider.address, config.token, config.oracle, config.jobId, Web3.utils.toBN(config.fee)); await linkToken.methods.transfer(nft.address, Web3.utils.toBN(config.fee).muln(10)).send(); } }; Llamar a esto da como resultado un error, indicando que no se ha proporcionado ninguna dirección para send() y que no hay una dirección predeterminada.
Replacing 'DemoNFT' ------------------- > block number: 33383565 > block timestamp: 1661007148 > account: 0x7775fccbfa977fEA0676CD9e2768A19008d47C7F > balance: 100.946846325862723725 > gas used: 5022789 (0x4ca445) > gas price: 2 gwei > value sent: 0 ETH > total cost: 0.010045578 ETH Error: No "from" address specified in neither the given options, nor the default options.Configuré una semilla para el proveedor en truffle.js, lo que da como resultado esta dirección.
provider: function() { return new HDWalletProvider( process.env.MNEMONIC, `https://rinkeby.infura.io/v3/${process.env.INFURA_ID}` ) }, Sin embargo, web3.eth.getCoinbase() (y web3.eth.getAccounts() ) devuelve una dirección completamente diferente.
¿Cómo puedo transferir tokens desde la billetera configurada para el proveedor al contrato recién implementado en este script de migración de trufas?
Creo que esto podría causar problemas:
const DemoNFT = artifacts.require("./DemoNFT.sol");está pasando la ubicación relativa del archivo pero debería pasar el nombre del contrato
const DemoNFT = artifacts.require("nameOfSolidityContract");si su nombre es DemoNFT
artifacts.require("DemoNFT")De los documentos:
El nombre especificado debe coincidir con el nombre de la definición del contrato dentro de ese archivo fuente. No pase el nombre del archivo de origen, ya que los archivos pueden contener más de un contrato.