我正在尝试使用以太坊和web3构建一个Ionic dapp,到目前为止,我已经成功地创建了一个契约示例,但似乎当我试图调用一个方法来获取契约中的信息时,我得到了以下错误:
ReferenceError: originalStackTrace is not defined
at new PromiEvent (:8100/webpack:/node_modules/@truffle/contract/lib/promievent.js:8)
at Function.call (:8100/webpack:/node_modules/@truffle/contract/lib/execute.js:121)
at AppComponent.<anonymous> (:8100/webpack:/src/app/app.component.ts:96)
at Generator.next (<anonymous>)
at fulfilled (:8100/webpack:/node_modules/tslib/tslib.es6.js:71)
at ZoneDelegate.invoke (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:364)
at Object.onInvoke (:8100/webpack:/node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js:41654)
at ZoneDelegate.invoke (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:363)
at Zone.run (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:123)
at :8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:857
at ZoneDelegate.invokeTask (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:399)
at Object.onInvokeTask (:8100/webpack:/node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js:41632)
at ZoneDelegate.invokeTask (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:398)
at Zone.runTask (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:167)
at drainMicroTaskQueue (:8100/webpack:/node_modules/zone.js/dist/zone-evergreen.js:569)
下面是组件中的代码:
testContractCall() {
this.w3.artifactsToContract(metacoin_artifacts)
.then(async (MetaCoinAbstraction) => {
this.TestContract = TestContractAbstraction;
try{
const deployedContract = await this.TestContract.deployed();
console.log("DEPLOYED: ", deployedContract); //it does print it, and it has the method
const result = await deployedContract.getTestName.call();
console.log("Le result: ", result); //it doesn't reach here, goes to catch
} catch(e) {
console.error("Error: ",e);
}
});
}
合同是这样的:
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.21 <0.7.0;
contract TestContract {
struct TestUser {
string name;
uint age;
uint id;
}
uint lastUser;
mapping(uint => TestUser) usuarios;
constructor () public {
usuarios[1] = TestUser({name: "testName", age: 21, id: 1});
lastUser = 1;
}
function getTestName() public view returns(string memory) {
return usuarios[1].name;
}
}
另外,下面是我的节点依赖关系:
"dependencies": {
"@angular/common": "~9.1.6",
"@angular/core": "~9.1.6",
"@angular/forms": "~9.1.6",
"@angular/platform-browser": "~9.1.6",
"@angular/platform-browser-dynamic": "~9.1.6",
"@angular/router": "~9.1.6",
"@ionic-native/core": "^5.27.0",
"@ionic-native/splash-screen": "^5.27.0",
"@ionic-native/status-bar": "^5.27.0",
"@ionic/angular": "^5.2.3",
"@truffle/contract": "^4.2.11",
"cordova-android": "^8.1.0",
"fs": "0.0.1-security",
"rxjs": "~6.5.1",
"truffle-contract": "^4.0.31",
"tslib": "^1.10.0",
"web3": "^1.2.9",
"zone.js": "~0.10.2"
}
1条答案
按热度按时间46scxncf1#
错误在
@truffle/contract
库中。我用truffle-contract
解决了它。对于任何最终遇到这种情况的人:以后每隔
与
就我而言,它们的使用方式是相同的,所以代码应该工作得很好。