Я развернул контракт на трюфель и могу подключиться к нему через angular. TokenAbi относится к моему локальному экземпляру файла контракта json. Если я хочу получить доступ к сторонним контрактам, мне интересно, как это изменится, если я знаю адрес контракта (0xa7950807A56eABA7fC7d8E68D4449317776424b6)?
Ключевая строка приведена ниже, и мне интересно, как она меняется для сторонних контрактов:
const tokenAbi = require('../../../../truffle/build/contracts/Transfer.json');
Полный файл в виде angular службы, извлекающей данные контракта:
import { Injectable } from '@angular/core';
const Web3 = require('web3');
declare let require: any;
declare let window: any;
const tokenAbi = require('../../../../truffle/build/contracts/Transfer.json');
@Injectable({
providedIn: 'root'
})
export class TransferService {
private account: any = null;
private readonly web3: any;
private enable: any;
constructor() {
if (window.ethereum === undefined) {
alert('Non-Ethereum browser detected. Install MetaMask');
} else {
if (typeof window.web3 !== 'undefined') {
this.web3 = window.web3.currentProvider;
} else {
this.web3 = new Web3.providers.HttpProvider('http://localhost:8545');
}
console.log('transfer.service :: constructor :: window.ethereum');
window.web3 = new Web3(window.ethereum);
console.log('transfer.service :: constructor :: this.web3');
console.log(this.web3);
this.enable = this.enableMetaMaskAccount();
}
}
private async enableMetaMaskAccount(): Promise<any> {
let enable = false;
await new Promise((resolve, reject) => {
enable = window.ethereum.enable();
});
return Promise.resolve(enable);
}
...
transferEther(value) {
const that = this;
console.log('transfer.service :: transferEther to: ' +
value.transferAddress + ', from: ' + that.account + ', amount: ' + value.amount);
return new Promise((resolve, reject) => {
console.log('transfer.service :: transferEther :: tokenAbi');
console.log(tokenAbi);
**const contract = require('@truffle/contract');
const transferContract = contract(tokenAbi);**
transferContract.setProvider(that.web3);
console.log('transfer.service :: transferEther :: transferContract');
console.log(transferContract);
transferContract.deployed().then(function(instance) {
return instance.pay(
value.transferAddress,
{
from: that.account,
value: value.amount
});
}).then(function(status) {
if (status) {
return resolve({status: true});
}
}).catch(function(error) {
console.log(error);
return reject('transfer.service error');
});
});
}
}