Como se describe en metamask github, uno puede iniciar metamask de esta manera:
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()
})
¿Cómo implemento en angular 2 mecanografiado, y dónde conecto esta inyección de metamask web3 para que aparezca la billetera de metamask cada vez que activeweb3.eth.sendTransaction()
La forma más sencilla de hacer esto es editar main.ts
y reemplazar
platformBrowserDynamic().bootstrapModule(AppModule);
por
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);
});
luego crea un servicio y haz
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;
}
La aplicación StackExchange Bounty ÐApp de Oracle podría ser buena para usar como ejemplo. Está implementado , pero no parece tener mucho uso. Utiliza un front-end Angular2. (Estoy seguro de que hay muchos otros, pero este es el único con el que he jugado).
Específicamente, observe cómo el web3.service.ts
archivo Typescript maneja las conexiones de MetaMask en su @Injectable
( línea 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());
}
}
Tendrá que ver cómo está configurado todo su proyecto para tener una idea de los servicios, etc., pero es un buen lugar para comenzar.
chelo_c