Skip to content

Commit

Permalink
docs: pay with multisig
Browse files Browse the repository at this point in the history
  • Loading branch information
benjlevesque committed Mar 10, 2020
1 parent ab8f73f commit b0e9889
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
68 changes: 68 additions & 0 deletions packages/docs/docs/guides/4-request-payment/2-multisig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/**
* # Handle multisig payments
*
* ## Pay with a multisig
* Imports
*/

import { Contract, ContractTransaction, Signer } from 'ethers';

// TODO export this from @requestnetwork/payment-processor
import {
encodeApproveErc20,
encodePayErc20Request,
} from '@requestnetwork/payment-processor/dist/payment/erc20-proxy';
import { getRequestPaymentValues } from '@requestnetwork/payment-processor/dist/payment/utils';
import { ClientTypes } from '@requestnetwork/types';

/**
* [Gnosis multisig](https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol) partial abi
*/
const multisigAbi = [
'function submitTransaction(address _destination, uint _value, bytes _data) returns (uint)',
];

/**
* ### Pay ETH request
*/
export const payEthWithMultisig = async (
request: ClientTypes.IRequestData,
multisigAddress: string,
signer: Signer,
): Promise<ContractTransaction> => {
const multisigContract = new Contract(multisigAddress, multisigAbi, signer);

const { paymentAddress, paymentReference } = getRequestPaymentValues(request);
return multisigContract.submitTransaction(paymentAddress, 0, paymentReference);
};

/**
* ### Approve ERC20 spending
*/
export const approveErc20WithMultisig = async (
request: ClientTypes.IRequestData,
multisigAddress: string,
signer: Signer,
): Promise<ContractTransaction> => {
const multisigContract = new Contract(multisigAddress, multisigAbi, signer);
const tokenAddress = request.currencyInfo.value;

return multisigContract.submitTransaction(tokenAddress, 0, encodeApproveErc20(request, signer));
};
/**
* ### Pay ERC20 request
*/
export const payErc20WithMultisig = async (
request: ClientTypes.IRequestData,
multisigAddress: string,
signer: Signer,
): Promise<ContractTransaction> => {
const multisigContract = new Contract(multisigAddress, multisigAbi, signer);
const tokenAddress = request.currencyInfo.value;

return multisigContract.submitTransaction(
tokenAddress,
0,
encodePayErc20Request(request, signer),
);
};
4 changes: 4 additions & 0 deletions packages/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,12 @@
"@docusaurus/preset-classic": "2.0.0-alpha.43",
"@docusaurus/theme-live-codeblock": "2.0.0-alpha.43",
"@docusaurus/utils": "2.0.0-alpha.43",
"@requestnetwork/types": "0.12.0",
"@requestnetwork/payment-processor": "0.13.0",
"@requestnetwork/smart-contracts": "0.4.0",
"classnames": "2.2.6",
"core-js": "3.6.4",
"ethers": "^4.0.45",
"mobx": "5.15.4",
"react": "16.8.4",
"react-dom": "16.8.4",
Expand Down
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6632,7 +6632,7 @@ ethers@4.0.42:
uuid "2.0.1"
xmlhttprequest "1.8.0"

ethers@4.0.45:
ethers@4.0.45, ethers@^4.0.45:
version "4.0.45"
resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.45.tgz#8d4cd764d7c7690836b583d4849203c225eb56e2"
integrity sha512-N/Wmc6Mw4pQO+Sss1HnKDCSS6KSCx0luoBMiPNq+1GbOaO3YaZOyplBEhj+NEoYsizZYODtkITg2oecPeNnidQ==
Expand Down

0 comments on commit b0e9889

Please sign in to comment.