Brink
  • Introduction
  • Getting Started
    • Overview
  • Developers
    • Smart Contracts
    • API
    • SDK
    • Executor Guide
    • App API
  • Links
  • Github
  • Discord
  • Twitter
  • YouTube
Powered by GitBook
On this page
  • Installation
  • Setup
  • Account
  • Read-only Methods
  • Implementation()
  • isDeployed()
  • nextBit()
  • loadBitmap()
  • Transaction Methods
  • sendLimitSwap(limitSwapSignedMessage, to, data)
  • cancel(cancelSignedMessage)
  • transferEth(signedEthTransferMessage)
  • transferToken(signedTokenTransferMessage)
  • deploy()
  • externalCall(value, to, data)
  • delegateCall(to, data)
  • metaDelegateCall(to, data, signature)
  • metaPartialSignedDelegateCall(to, data, signature, unsignedData)
  • AccountSigner
  • accountAddress()
  • signerAddress()
  • signEthTransfer(bitmapIndex, bit, recipient, amount, expiryBlock)
  • signTokenTransfer(bitmapIndex, bit, tokenAddress, recipient, amount, expiryBlock)
  • signEthToTokenSwap(bitmapIndex, bit, tokenAddress, ethAmount, tokenAmount, expiryBlock)
  • signTokenToEthSwap(bitmapIndex, bit, tokenAddress, tokenAmount, ethAmount, expiryBlock)
  • signTokenToTokenSwap(bitmapIndex, bit, tokenInAddress, tokenOutAddress, tokenInAmount, tokenOutAmount, expiryBlock)
  • signCancel(bitmapIndex, bit)

Was this helpful?

  1. Developers

SDK

The Brink SDK is a useful tool for developers who want to create and execute upon signed messages.

PreviousAPINextExecutor Guide

Last updated 3 years ago

Was this helpful?

Installation

The can be used to interact with Brink proxy accounts, either as the account owner/signer or as an executor of messages signed by the account owner/signer.

npm install @brinkninja/sdk

Setup

Quick Links: , , ,

const ethers = require('ethers)
const brinkSDK = require('@brinkninja/sdk')

// Obtain a signer and a provider from the Ethers Library [link above]
const ethersProvider = await ethers.getDefaultProvider(process.env.RPC_URLS)
const ethersSigner = await new ethers.Wallet(process.env.ETH_PRIVATE_KEY)

// Instantiate with environment config: `local`, `dev`, `prod` (see brink-environment) [link above]
const brink = brinkSDK('dev')

// Get an Account instance for any account owner, to read account state and execute meta transactions for this account
// Requires: ownerAddress, provider
// Optional: signer (If not provided, uses provider.getSigner()[link above])
const account = brink.account(ownerAddress, { provider: ethersProvider, signer: ethersSigner })

// Get an AccountSigner instance to sign messages as the owner of an account. Takes an ethers.js Signer [link above]
const accountSigner = brink.accountSigner(ethersSigner)

Account

Read-only Methods

These methods are available to read from account contract state

Implementation()

const implAddress = await account.implementation()

isDeployed()

Returns true if the account has been deployed.

const deployed = await account.isDeployed()

nextBit()

Returns the next valid bit of the account.

const nextBit = await account.nextBit()

loadBitmap()

Loads the bitmap

const bitmap = await account.loadBitmap()

Transaction Methods

const txData = await account.populateTransaction.sendLimitSwap(swapSignedMsg, toAddress, callData)

And an example of getting a gas estimate is below:

const gasEstimate = await account.estimateGas.sendLimitSwap(swapSignedMsg, toAddress, callData)

sendLimitSwap(limitSwapSignedMessage, to, data)

params:

limitSwapSignedMessage: a valid signed limit swap message (see AccountSigner methods signEthToTokenSwap(), signTokenToTokenSwap(), and signTokenToEthSwap())

to: Address of the contract that will provide liquidity for the fullfilment of the swap

data: Call data that will be executed on the contract at toAddress in order to fullfil the swap

Example:

const tx = await account.sendLimitSwap(swapSignedMsg, toAddress, callData)

cancel(cancelSignedMessage)

params:

cancelSignedMessage: a valid signed cancel message (see AccountSigner method signCancel())

Example:

const tx = await account.cancel(cancelSignedMsg)

transferEth(signedEthTransferMessage)

params:

signedEthTransferMessage: a valid signed eth transfer message (see AccountSigner method signEthTransfer())

Example:

const tx = await account.transferEth(signedEthTransferMsg)

transferToken(signedTokenTransferMessage)

params:

signedTokenTransferMessage: a valid signed token transfer message (see AccountSigner method signTokenTransfer())

Example:

const tx = await account.transferToken(signedTokenTransferMsg)

deploy()

Deploys the account contract. Throws an error if the contract is already deployed

Example:

const tx = await account.deploy()

externalCall(value, to, data)

This can only be called if the ethers.js signer is the owner of the account

Example:

const tx = await account.externalCall(value, to, data)

delegateCall(to, data)

This can only be called if the ethers.js signer is the owner of the account

Example:

const tx = await account.delegateCall(to, data)

metaDelegateCall(to, data, signature)

This can only be called with a valid message signed by the owner of the account

Example:

const tx = await account.metaDelegateCall(to, data, signature)

metaPartialSignedDelegateCall(to, data, signature, unsignedData)

This can only be called with a valid message signed by the owner of the account

Example:

const tx = await account.metaPartialSignedDelegateCall(to, data, signature, unsignedData)

AccountSigner

Handles signing of account messages. These authorize actions that can be taken on the account by executors.

Messages are returned in this format:

{
  message: '<signed message hash>',
  EIP712TypedData: <object with decoded EIP712 typed data>,
  signature: '<the signature>',
  signer: '<address of the signer>',
  accountAddress: '<address of the account>',
  functionName: '<function on Account.sol that is authorized by this message>',
  signedParams: <array of signed parameters>
}

accountAddress()

Returns the address of the account

signerAddress()

Returns the address of the signer

signEthTransfer(bitmapIndex, bit, recipient, amount, expiryBlock)

Returns a signed metaDelegatedCall message that allows execution of an ETH transfer

  • expiryBlock defaults to the max unit256

signTokenTransfer(bitmapIndex, bit, tokenAddress, recipient, amount, expiryBlock)

Returns a signed metaDelegatedCall message that allows execution of an ERC20 token transfer

  • expiryBlock defaults to the max unit256

signEthToTokenSwap(bitmapIndex, bit, tokenAddress, ethAmount, tokenAmount, expiryBlock)

Returns a signed metaPartialSignedDelegateCall message that allows execution of an ETH to ERC20 token swap

  • expiryBlock defaults to the max unit256

signTokenToEthSwap(bitmapIndex, bit, tokenAddress, tokenAmount, ethAmount, expiryBlock)

Returns a signed metaPartialSignedDelegateCall message that allows execution of an ERC20 token to ETH swap

  • expiryBlock defaults to the max unit256

signTokenToTokenSwap(bitmapIndex, bit, tokenInAddress, tokenOutAddress, tokenInAmount, tokenOutAmount, expiryBlock)

Returns a signed metaPartialSignedDelegateCall message that allows execution of an ERC20 token to ERC20 token swap

  • expiryBlock defaults to the max unit256

signCancel(bitmapIndex, bit)

Returns a signed cancel message that flips the requested bit of the proxy account

Returns the implementation address of the account proxy contract. Should be a deployed instance of .

The following methods issue transactions to an account contract. They wrap and can be used in the same way.

The Account instance exposes the estimateGas, populateTransaction, and callStatic. These can be used for any Account transaction. For example, getting transaction data without submitting the transaction can be done like this:

All of these transactions (except for deploy()) will include the desired action after account deployment, if the account has not been deployed yet, using . If the account is already deployed, the action will be executed directly on the account contract.

deployment, if the account has not been deployed yet, using . If the account is already deployed, the action will be executed directly on the account contract.

Calls on the account contract.

Calls on the account contract.

Calls on the account contract.

Calls on the account contract.

Verifier function:

Verifier function:

Verifier function:

Verifier function:

Verifier function:

Brink SDK module
Github Link
Ethers Library
brink-environment
provider.getSigner()
Signer
Account.sol
ethers.js Contract Meta-class methods
ethers.js write method analysis properties
DeployAndExecute.sol
DeployAndExecute.sol
externalCall
delegateCall
metaDelegateCall
metaPartialSignedDelegateCall
TransferVerifier.ethTransfer()
TransferVerifier.tokenTransfer()
LimitSwapVerifier.ethToToken()
LimitSwapVerifier.tokenToEth()
LimitSwapVerifier.tokenToToken()