Как описано в метамаске github, метамаску можно загрузить следующим образом:
window.addEventListener('load', function() {
// Checking if Web3 has been injected by the browser (Mist/MetaMask) if (typeof web3 !== 'undefined') {
// Use Mist/MetaMask's provider
window.web3 = new Web3(web3.currentProvider); } else {
console.log('No web3? You should consider trying MetaMask!')
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); }
// Now you can start your app & access web3 freely: startApp()
})
Как мне реализовать в машинописном тексте angular 2 и где мне подключить эту метамаску web3, чтобы она открывала кошелек метамаски всякий раз, когда я запускаюweb3.eth.sendTransaction()
Самый простой способ сделать это — отредактировать файл main.ts.
и заменить
platformBrowserDynamic().bootstrapModule(AppModule);
по
window.addEventListener('load', function() {
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof window.web3 !== 'undefined') {
// Use Mist/MetaMask's provider
window.web3 = new Web3(window.web3.currentProvider);
} else {
console.log('No web3? You should consider trying MetaMask!')
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
platformBrowserDynamic().bootstrapModule(AppModule);
});
затем создайте службу и сделайте
declare global {
interface Window { web3: any; }
}
window.web3 = window.web3 || {};
@Injectable()
export class Web3Service {
web3: any;
constructor() {
this.web3 = window.web3;
}
getWeb3() {
return this.web3;
}
В качестве примера можно использовать приложение StackExchange Bounty от Oraclize . Он развернут , но, похоже, не очень полезен. Он использует интерфейс Angular2. (Я уверен, что есть много других, но это единственный, с которым я играл.)
В частности, взгляните на то, как web3.service.ts
файл Typescript обрабатывает соединения MetaMask в его @Injectable
( строка 161 ):
connectToNode(): void { // Don't unlock until you send a transaction
if (typeof window['web3'] !== 'undefined' && (!localStorage['nodeIP'] || this.nodeIP === 'MetaMask')) {
localStorage['nodeIP'] = this.nodeIP;
console.log('Using injected web3');
this.web3 = new this.Web3(window['web3'].currentProvider);
this.nodeIP = 'MetaMask';
this.nodeConnected = true;
this.unlockedAccount = 'MetaMask';
this.update.emit(null);
} else {
localStorage['nodeIP'] = this.nodeIP;
console.log('Using HTTP node');
this.unlockedAccount = undefined;
this.web3 = new this.Web3(new this.Web3.providers.HttpProvider(this.nodeIP));
this.handleConnection(this.web3.isConnected());
}
}
Вам нужно будет посмотреть, как устроен весь их проект, чтобы получить представление об услугах и т. д., но это хорошее место для начала.
chelo_c