title: cannot call the function in smart contract
body: <p>i am try to call a method in solidity smart contract through angular app. but i unable to call the method. can someone please help me. this is the error i get in console</p>
  
  <pre><code>TypeError: this.contract.methods.hello is not a function
  at CertificateContractService.&lt;anonymous&gt; (certificate-contract.service.ts:32)
  at Generator.next (&lt;anonymous&gt;)
  at fulfilled (tslib.es6.js:70)
  at ZoneDelegate.invoke (zone-evergreen.js:359)
  at Object.onInvoke (core.js:39699)
  at ZoneDelegate.invoke (zone-evergreen.js:358)
  at Zone.run (zone-evergreen.js:124)
  at zone-evergreen.js:855
  at ZoneDelegate.invokeTask (zone-evergreen.js:391)
  at Object.onInvokeTask (core.js:39680)
  </code></pre>
  
  <hr>
  
  <h2>Smart contract</h2>
  
  <pre><code>
  contract CertificateList {
  
      function hello() external pure returns (string memory )  {
          return "Hello";
      }
  
  }
  </code></pre>
  
  <h2>Angular service</h2>
  
  <pre><code>import Web3 from 'web3';
  import {WEB3} from './WEB3';
  
  declare let require: any;
  declare let window: any;
  
  
  @Injectable({
    providedIn: 'root'
  })
  export class CertificateContractService {
    private abi: any;
    private address = '0xb0fFD3498B219ad2A62Eb98fEDE591265b3C3B67';
    private contract;
    private accounts: string[];
  
    constructor(@Inject(WEB3) private web3: Web3) {
      this.init().then(res =&gt; {
      }).catch(err =&gt; {
        console.error(err);
      });
    }
  
    private async init() {
      this.abi = require('../assets/abi/CertificateList.json');
      // await this.web3.currentProvider.enable();
      this.accounts = await this.web3.eth.getAccounts();
  
      this.contract = new this.web3.eth.Contract(this.abi, this.address, {gas: 1000000, gasPrice: '10000000000000'});
  
      this.contract.methods.hello().send()
        .then(receipt =&gt; {
          console.log(receipt);
        }).catch(err =&gt; {
        console.error(err);
      });
    }
  }
  </code></pre>
  
  <h2>Provider</h2>
  
  <pre><code>import { InjectionToken } from '@angular/core';
  import Web3 from 'web3';
  
  export const WEB3 = new InjectionToken&lt;Web3&gt;('web3', {
    providedIn: 'root',
    factory: () =&gt; {
      try {
        window['ethereum'].autoRefreshOnNetworkChange = false;
        const provider = ('ethereum' in window) ? window['ethereum'] : Web3['givenProvider'];
        return new Web3(provider);
      } catch (err) {
        throw new Error('Non-Ethereum browser detected. You should consider trying Mist or MetaMask!');
      }
    }
  });
  </code></pre>