Good day,
Hope all is well with you!
I have been struggling those days with a calling a contract instance from my app, using identity provider. After some researches came to the conclusion, that angular 8 might have troubles to resolve iframe on time.
Contract instance seems to be created correctly, but when I call a function to the contract it fails with
ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'call' of undefined
TypeError: Cannot read property 'call' of undefined
at TodoListComponent.<anonymous> (todo-list.component.ts:267)
at step (main.js:2468)
at Object.next (main.js:2449)
at main.js:2443
at new ZoneAwarePromise (zone.js:931)
at push../src/app/components/todo-list/todo-list.component.ts.__awaiter (main.js:2439)
at TodoListComponent.push../src/app/components/todo-list/todo-list.component.ts.TodoListComponent.getContractTasks (todo-list.component.ts:259)
at TodoListComponent.<anonymous> (todo-list.component.ts:93)
at step (main.js:2468)
at Object.next (main.js:2449)
at resolvePromise (zone.js:852)
at zone.js:762
at rejected (main.js:2441)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:391)
at Object.onInvoke (core.js:26769)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:390)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:150)
at zone.js:910
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:26760)
If i instantiate the client locally however this way
this.localClient = await Universal({
url: clientConfig.host,
internalUrl: clientConfig.internalHost,
keypair: keyPair,
nativeMode: true,
networkId: 'ae_devnet',
compilerUrl: 'https://compiler.aepps.com'
});
transactions are executed successfully
Steps to reproduce
- install forgae (npm install forgae)
- checkout to branch feature/angular-shape-command
- from cli
– forgae shape angular
– forgae deploy
– forgae history and get the contract address ( Result ) - in aepp-forgae-shape-angular/aepp/src/contractDetails.js enter your deployed contract address
- ng serve aepp & identityProvider
Mostly play around with todo-list.component.ts
the error occurs in
getContractTasks()
while trying to call
this.contractInstance!.call("get_todos", []);
That behaviour appears only while the client is instantiated with await this.getClient();
Something goes wrong with the post messaging I believe?
PS if you comment
91 await this.getClient();
267 const allToDosResponse : any = await this.contractInstance!.call("get_todos", []);
268 const allToDos = await allToDosResponse.decode();
269 const parsedToDos = this.convertSophiaListToTodos(allToDos);
Uncoment
262 // const allToDosResponse = await this.localContractInstance!.call("get_todos", [])
263 // const allToDos = await allToDosResponse.decode();
264 // const parsedToDos = this.convertSophiaListToTodos(allToDos);
Make sure you copied previously deployed contract address and paste it in aepp-forgae-shape-angular/aepp/src/localContractDetails.js
You would have working todo app
Any help will be much appreciated!
Regards,