I have an application (www.arbol.app) where certain individuals who are new to crypto (and not necessarily technology experts) need to call various payable functions in my smart contract.

The way people would use my application is 1. they would create a coinbase.com account 2. deposit fiat 3. purchase Ether, 4. transfer said Ether to an address saved in their Metamask, and 5. call my smart contract's payable functions while sending ether.

I would like to cut Metamask out of this process as it is prohibitively complicated for the demographic we are targeting (regular people). Is it possible to do this by using the Coinbase API's "send ether" function on behalf of the user targeting our smart contract, and simultaneously executing some web3 code that specifies which specific payable function we want? I know next to nothing about how Metamask works under the hood, so anything is appreciated.


The Coinbase API will not work as a replacement for the Metamask extension.

Metamask plays two major roles when interacting with smart contacts:

  1. It acts as a Web3 provider, allowing your browser to interface with the Ethereum blockchain. This allows client side applications (usually JavaScript) to makes calls to and receive data from the Ethereum blockchain.
  2. More importantly, it acts as a account/wallet for the user, giving the user a unique identity where they can can be the controller of their own coins and interactions with a smart contract.

When a user buys coins using Coinbase, they never really "own" the coins. Instead, their wallets hold the coins on behalf of the user, and any actions the user performs like transfers or deposits are all being done by Coinbase's back end systems.

The user does not own the private keys to access their Ether when it is on Coinbase, and thus they do not control their Ether.

As a result, they will not be able to accurately participate in your smart contract because they do not have the ability to create and sign transactions themselves. They will not be able to send any payloads to the smart contract which call specific functions, and they will not be able to consistently call the smart contract with the same account.

Your Answer

