# Sending a TransferFrom contract call
> PLEASE DO A TEST TRANSACTION WITH A SMALL AMOUNT BEFORE TRANSFERING A LARGE AMOUNT. IF YOU SEE ANYTHING WRONG WITH THIS DOCUMENT PLEASE ADD A NOTE OR CONTACT `#Wade | TPT#4475` ON DISCORD.
## Prelude
Multiple parties have requested funds from the Celo governance contract and have used a Gnosis Safe(or equivalent eg CeloSafe v1/v2). The safe does NOT have built in functionality for using the transferFrom function that is present on the standard ERC20 interface like Celo Terminal does.
It can still be done but requires some knowledge of smart contracts, is not easy to navigate and leaves room for error. This document is to specify what the steps are to send a transferFrom contract call from the Celo Governance contract using the address that was specified in a governance proposal to an address specified by the user.
## Appendix
**Celo Token Proxy Address:**[`0x471ece3750da237f93b8e339c536989b8978a438`](https://celoscan.io/address/0x471ece3750da237f93b8e339c536989b8978a438)
**Celo Governance Address:**[`0xD533Ca259b330c7A88f74E000a3FaEa2d63B7972`](https://celoscan.io/address/0xD533Ca259b330c7A88f74E000a3FaEa2d63B7972)
[**Celo Token ABI:**](https://)
```
[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"bool","name":"test","internalType":"bool"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RegistrySet","inputs":[{"type":"address","name":"registryAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TransferComment","inputs":[{"type":"string","name":"comment","internalType":"string","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"pure","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"}],"name":"getVersionNumber","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"increaseSupply","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"initialize","inputs":[{"type":"address","name":"registryAddress","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"initialized","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"contract IRegistry"}],"name":"registry","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"renounceOwnership","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setRegistry","inputs":[{"type":"address","name":"registryAddress","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferWithComment","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"string","name":"comment","internalType":"string"}],"constant":false}]
```
## Steps
> This was done from Celo Safe V2 but should work for any Gnosis Safe implementation
#### 1. Log in to your Safe
Log in and click `New Transaction` on the left hand side of the page. This wil bring up a modal, click ` Contract Interation`

#### 2. Enter ABI
Enter the Celo Proxy Address

#### 3. Change the ABI to the CELO/cUSD Contract
Step 2 will auto populate the ABI with the proxy ABI. We will want to change that to the actual CELO ERC20 ABI to access the transferFrom function
> For the image below
1. This is the Celo Token Proxy Address(0x471ece3750da237f93b8e339c536989b8978a438)
2. The ABI of the CELO Token Contract(See appendix above)
3. This is where our contract interaction is being sent to and this will be the CELO Token proxy.
4. The method we want to interact with(We specify the transferFrom)
> **NOTE:** If you are not withdrawing CELO and are instead withdrawing cUSD. This process is relatively the same but instead of using the CELO Token Proxy above. You would use the cUSD Token Proxy address. `0x765de816845861e75a25fca122bb6898b8b1282a`

#### 4. Fill in the the appropriate addresses
You will now need to add the addresses you are wishing to interact with
> For the image below:
> 5. from(address): This is the Celo Governance Contract(0xD533Ca259b330c7A88f74E000a3FaEa2d63B7972)
> 6. to(address): This is the address you are wishing to transfer funds from the Governance contract to. It could be the multisig you are using to do this interaction from or any other address.
> value(uint256)\*: The wei amount of funds you are wishing to transfer. eg 1 CELO = 1000000000000000000
> you can use this [webpage](https://eth-converter.com/) to easily convert CELO to the wei value

#### Create Transaction
Click `Add Transaction`