Ich habe ein Setup mit einem Vertrag, der ein Singleton ist und z. B. über die Truffle-Konsole zu einem Testnet migriert wird. Dieser Vertrag „erstellt“ neue Verträge, auf die ich in der Truffle-Konsole zugreifen möchte. instance.at(address)
Da die neuen Verträge nicht über die Konsole migriert werden, möchte ich sie in einem Befehl verwenden, den ich in Truffle ausführen werde. Die Instanz wird jedoch nicht erkannt ...
Verträge:
Singleton.sol
→ über Truffle migriert ManyOfMe.sol
→ über Singleton.sol erstellt
Fehler:
TypeError: ManyOfMe.at ist keine Funktion
Code: run.js
ausgeführt durch die Truffle-Konsole:exec ./run.js
const artifacts = require('./build/contracts/Singleton.json')
const ManyOfMe = require('./build/contracts/ManyOfMe.json')
const contract = require('truffle-contract')
const MyContract = contract(artifacts)
MyContract.setProvider(web3.currentProvider)
let Singleton
MyContract.deployed()
.then(async function(instance) {
Singleton = instance
let tokenAddress
await Singleton.tokens(0).then(_ => {
tokenAddress = _
})
return ManyOfMe.at(tokenAddress)
})
.then(function(instance) {
instance.doSomething().then(_ => console.log(_))
})
.catch(function(error) {
console.error(error)
})
PS: Wenn ich einfach ManyOfMe in die Truffle-Konsole eingebe, sehe ich die at
Funktion, also bin ich mir nicht sicher, warum es nicht funktionieren wird.
Wenn Sie das Skript mit ausführen truffle exec
, haben Sie bereits den Truffle-Kontext (z. B. artifacts
), sodass Sie nicht alles manuell importieren müssen.
Was Sie erreichen möchten, ist ungefähr so hier:
const Singleton = artifacts.require("Singleton");
const ManyOfMe = artifacts.require("ManyOfMe");
module.exports = function(done) {
// code rewritten with async/await
(async () => {
var singleton = await Singleton.deployed();
var manyOfMeAt0 = await ManyOfMe.at(await singleton.tokens(0));
console.log(await manyOfMeAt0.doSomething());
done();
})();
}
Wenn Sie außerdem async
/ verwenden können await
, sind then
-Ketten nicht erforderlich. Es verbessert die Lesbarkeit.
mesqueeb
done()
?ivicaa
mesqueeb
ivicaa