Подключение к третьему лицу ethereum контракт с @ truffle / contract и angular - PullRequest
0 голосов
/ 01 августа 2020

Я развернул контракт на трюфель и могу подключиться к нему через 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');
      });
    });
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...