diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..7e4a48068f --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +docs/public/** filter=lfs diff=lfs merge=lfs -text diff --git a/docs/pages/.DS_Store b/docs/pages/.DS_Store index 70052dbc5a..c659c4cdf4 100644 Binary files a/docs/pages/.DS_Store and b/docs/pages/.DS_Store differ diff --git a/docs/pages/guides/templates/02-building-relaying-server.mdx b/docs/pages/guides/templates/02-building-relaying-server.mdx new file mode 100644 index 0000000000..7353eb5c51 --- /dev/null +++ b/docs/pages/guides/templates/02-building-relaying-server.mdx @@ -0,0 +1,267 @@ +--- +slug: /relayer/building-relaying-server +--- + +# Building a Relaying Server + +With Sequence, you can create a smart contract wallet your server can use to dispatch transactions for your users +without you having to be worried about transaction speed, throughput and re-orgs. + +:::info Sequentual Transactions +By default, Sequence transactions will be executed sequentially. +::: + +## Nodejs Server + +Your server will need an EOA wallet that will be able to sign messages. It will be the owner of your server-side Sequence +wallet which will be used to dispatch transactions. + +This Sequence wallet should have the correct ownership at your contract level, not the EOA. +Also, the Sequence wallet should be sufficiently funded in order to pay fees needed by the relayer to dispatch your transactions. + +Using this approach - versus the next section (with sponsoring) - includes the ability to pay for gas in any available currency by our relayer (e.g. 'MATIC', 'DAI', 'USDC', 'WETH'). + +```ts +import { Session } from '@0xsequence/auth' + +// Create your server EOA +const walletEOA = new ethers.Wallet(serverPrivateKey, provider) + +// Open a Sequence session, this will find or create +// a Sequence wallet controlled by your server EOA +const session = await Session.singleSigner({ + signer: walletEOA, + projectAccessKey: '' +}) + +// Get the Sequence wallet address +console.log(session.account.address) + +// Get a signer for a specific network +// - 1: Ethereum Mainnet +// - 137: Polygon Mainnet +// - 42161: Arbitrum One +// See https://chainid.network/ for more +const signer = session.account.getSigner(137) + +// Craft your transaction +const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' +]) + +const data = erc721Interface.encodeFunctionData( + 'safeTransferFrom', [senderAddress, recipientAddress, id] +) + +const txn = { + to: erc721TokenAddress, + data +} + +// Send the transaction +const txnResponse = await signer.sendTransaction(txn) + +// Check if transaction was successful +if (txnReceipt.status != 1) { + console.log(`Unexpected status: ${txnReceipt.status}`) +} +``` + +You can also enforce a specific way to pay for gas fees, or the openning of a specific Sequence wallet. + +```ts +import { Session } from '@0xsequence/auth' + +// Create your server EOA +const walletEOA = new ethers.Wallet(serverPrivateKey, provider) + +// Open a Sequence session, this will find or create +// a Sequence wallet controlled by your server EOA +const session = await Session.singleSigner({ + signer: walletEOA, + projectAccessKey: '' + // OPTIONAL: Multiple wallets could be found for the same EOA + // to enforce a specific wallet you can use the following callback + selectWallet: async (wallets: string[]) => { + const found = wallets.find(w => w === EXPECTED_WALLET_ADDRESS) + if (!found) throw Error('wallet not found') + // Returning the wallet address will make the session use it + // returning undefined will make the session create a new wallet + return found + } +}) + +const signer = session.account.getSigner(137, { + // OPTIONAL: You can also enforce a specific way to pay for gas fees + // if not provided the sdk will select one for you + selectFee: async ( + _txs: any, + options: FeeOption[] + ) => { + // Find the option to pay with native tokens + const found = options.find(o => !o.token.contractAddress) + if (!found) throw Error('fee option not found') + return found + } +}) + +// Initialize the contract +const usdc = new ethers.Contract( + '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC on Polygon + ERC_20_ABI, + signer +) + +// Send the transaction +const txnResponse = await usdc.transfer(recipient, 1) + +// Check if transaction was successful +if (txnReceipt.status != 1) { + console.log(`Unexpected status: ${txnReceipt.status}`) +} +``` + +:::caution Triggers migration + +Openning a session may trigger a migration of your Sequence wallet to a new version, this could be `v1` to `v2` or `v2` to future versions. + +Migration is a one-way process, once your wallet is migrated it cannot be reverted to a previous version. + +To catch any unwanted migration, you can use the `onMigration` callback. +::: + +## Nodejs Server with Gas Sponsoring using Sequence Builder + + +If you want to have your transactions sponsored & paid for with a credit card, you can follow the below steps before beginning your code, at the following link: https://sequence.build/ + +By sponsoring your transaction, you can now just send the transaction without a fee object and not have to fund the smart contract wallet before relaying any transactions. + +:::info Already Deployed Contract +For this example, we assume you have a smart contract deployed with a contract address to include in the last step. +::: + +### A. Create Dapp + +![Sequence builder create app](/img/builder/builder_create_dapp.png) + +### B. New Dapp + +![Sequence builder new dapp](/img/builder/builder_new_dapp.png) + +### C.1 Gas Tank + +![Sequence builder gas tank](/img/builder/builder_gas_tank.png) + +### C.2 Add Gas + +![Sequence builder add gas](/img/builder/builder_add_gas.png) + +### C.3 Add Sponsored Address + +![Sequence builder add sponsored address](/img/builder/builder_add_sponsored_address.png) + +The following is example code that implements a relayed transaction, same as the above example (i.e. Nodejs Server) but without fees, taken care of by the Sequence Builder. + +```ts +import { Session } from '@0xsequence/auth' + +// Create your server EOA +const walletEOA = new ethers.Wallet(serverPrivateKey, provider) + +// Open a Sequence session, this will find or create +// a Sequence wallet controlled by your server EOA +const session = await Session.singleSigner({ + signer: walletEOA, + projectAccessKey: '' +}) + +// Get the Sequence wallet address +console.log(session.account.address) + +// Get a signer for a specific network +// - 1: Ethereum Mainnet +// - 137: Polygon Mainnet +// - 42161: Arbitrum One +// See https://chainid.network/ for more +const signer = session.account.getSigner(137, { + // OPTIONAL: This ensures that the transaction is paid for by the gas tank + // but if not provided, the gas tank will be used anyway + selectFee: async ( + _txs: any, + _options: FeeOption[] + ) => { + return undefined + } +}) + +// Craft your transaction +const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' +]) + +const data = erc721Interface.encodeFunctionData( + 'safeTransferFrom', [senderAddress, recipientAddress, id] +) + +const txn = { + to: erc721TokenAddress, + data +} + +// Send the transaction +const txnResponse = await signer.sendTransaction(txn) + +// Check if transaction was successful +if (txnReceipt.status != 1) { + console.log(`Unexpected status: ${txnReceipt.status}`) +} +``` + +## Parallel Transactions + +If you want to send multiple independent transactions without needing to batch them, you can also send them in distinct nonce spaces. +Using distinct nonce spaces for your transactions signals to the relayer that there's no dependency between them and that +they can be executed on-chain in any order. + +This allows the transactions to be dispatched immediately in an unbuffered way without having to wait for a full batch. +Here is an example of how to do that: + +```js +// Generate random nonce spaces with ~0% probability of collision +const randomNonceSpace1 = ethers.BigNumber.from(ethers.utils.hexlify(ethers.utils.randomBytes(20))) +const randomNonceSpace2 = ethers.BigNumber.from(ethers.utils.hexlify(ethers.utils.randomBytes(20))) + +// Create signers for each nonce space +const signer1 = session.account.getSigner(137, { + nonceSpace: randomNonceSpace1 +}) + +const signer2 = session.account.getSigner(137, { + nonceSpace: randomNonceSpace2 +}) + +// Generate transactions +const txn1 = { + to: tokenContract.address, + data: erc20Interface.encodeFunctionData( + 'transfer', [recipient1, amount1] + ) +} + +const txn2 = { + to: tokenContract.address, + data: erc20Interface.encodeFunctionData( + 'transfer', [recipient2, amount2] + ) +} + +// Dispatch transactions, which can now be executed in parallel +await Promise.all([ + signer1.sendTransaction(txn1), + signer2.sendTransaction(txn2) +]) +``` + +If batching transactions is not a problem for your use-case, you can call `await wallet.sendTransaction(txns)`. +You can read more about batch transactions in [Sending Batched Transactions](/solutions/wallets/universal-wallet/03-guides/09-send-batch-transactions). diff --git a/docs/pages/guides/templates/03-mint-collectibles-serverless.mdx b/docs/pages/guides/templates/03-mint-collectibles-serverless.mdx new file mode 100644 index 0000000000..10a45c8fd4 --- /dev/null +++ b/docs/pages/guides/templates/03-mint-collectibles-serverless.mdx @@ -0,0 +1,384 @@ + +# Mint Collectibles Using a Gasless Serverless Relayer + +Time to complete: 20-30 minutes + +The Sequence Relayer can be implemented on a serverless [Cloudflare](https://cloudflare.com/) worker so a game or app user interaction is seamless without a confirmation signature or gas payment. You'll also benefit from not having to be worried about transaction speed, throughput and re-orgs by the relayer, and experience automatic scaling with Cloudflare. + +The following steps will guide you through how to build your hosted minter API in 4 steps: + +1. [Setup Cloudflare environment with wrangler cli and deploy a test](/guides/templates/03-mint-collectibles-serverless#1-setup-cloudflare-environment-with-wrangler-cli--deploy-a-test) +2. [Deploy, sponsor and update Metadata for an ERC1155 contract with Builder](/guides/templates/03-mint-collectibles-serverless#2-deploy-sponsor-and-update-metadata-for-an-erc1155-contract-with-builder) +3. [Use EthAuthProof to prevent EOA DDoS](/guides/templates/03-mint-collectibles-serverless#3-use-ethauthproof-to-prevent-eoa-ddos) +4. [Mint a collectible to wallet](/guides/templates/03-mint-collectibles-serverless#4-mint-a-collectible-to-wallet) + +The result, a secure API with the following specs: +* HTTPS GET: returns blockNumber +* HTTPS POST(proof, address): mints a collectible & returns transaction hash + +:::info Difficulty +You need basic knowledge of wrangler cli, npm, and Sequence Builder in order to complete this implementation. +::: + +## 1. Setup Cloudflare environment with wrangler cli and deploy a test + +In order to create the project from scratch, first create a project with `mkdir`, `cd` into the project, and run `pnpm init` to create a `package.json`. + +Next, make sure wrangler cli is installed in your project and set the `wrangler` keyword as an alias in your local bash session. + +``` +pnpm install wrangler --save-dev +alias wrangler='./node_modules/.bin/wrangler' +``` + +Create an account on the [Cloudflare site](https://cloudflare.com/) and perform a login step to login to your Cloudflare dashboard to connect the Cloudflare platform to your local development environment. + +``` +wrangler login +``` + +Once logged in, initialize the project in the directory by accepting one of the randomly generated project folder names provided that you like, and follow the prompts to initialize your git tracked typescript `"Hello World" Worker` application. + +``` +wrangler init +``` + +To complete this step, you should press enter 4 times after `wrangler init` with the last step answered as `No` to decline deployment. + +This will clone down a starter repository that can be used to deploy code to the cloud. + +:::info Local API Testing +At any point in the guide, you can use the `wrangler dev` command in the project folder for local testing +::: + +#### Deploy Test + +Finally, `cd` into the randomly generated project folder, and perform a `wrangler deploy` command. + +This should print a URL, which you can enter in the browser the URL `https://..workers.dev` to view the `Hello World!` result. + +## 2. Deploy, Sponsor and Update Metadata for an ERC1155 Contract with Builder + +First, follow [this guide](/solutions/collectibles/contracts/200-deploy-an-item-collection-contract) to deploy a contract. + +Then, one must update the role access of the contract in the Builder to only receive requests from the minter wallet address, which can be done in 2 steps. + +You can do this in Sequence Builder by providing `minter permission` to your `Sequence Wallet Relayer Address`. + +In order to know what the relayer address you are working with is, one must first either: + +1. Have one generated for you using this [dapp](https://73eql-hyaaa-aaaad-qf5bq-cai.ic.fleek.co/) by selecting your network, and generating a wallet keypair with the `generate local wallet` button +2. Or, you can print locally the account address produced from an EOA wallet private key using the following code snippet: + +```ts +import { Session } from '@0xsequence/auth' +import { ethers } from 'ethers'; + +(async () => { + + // Generate a new EOA + // const wallet = ethers.Wallet.createRandom() + // const privateKey = wallet.privateKey + + // Or, use an existing EOA private key + const privateKey = '' + const provider = new ethers.providers.JsonRpcProvider('https://nodes.sequence.app/mainnet') + + // Create your server EOA + const walletEOA = new ethers.Wallet(privateKey, provider) + + // Open a Sequence session, this will find or create + // a Sequence wallet controlled by your server EOA + const session = await Session.singleSigner({ + signer: walletEOA, + projectAccessKey: 'access_key' + }) + + const signer = session.account.getSigner(1) + console.log(`Your relayer wallet address: ${signer.account.address}`) + +})() +``` +To do so, open your project, navigate to the `Contracts` page, select your `Linked contracts` and under `Write Contract` tab expand the `grantRole` method. + +Complete with the following details: + +`bytes32 role`: `0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6` + +`address account`: `` + + + +Where the `role` string inputted is the result of `keccak256("MINTER_ROLE")` in solidity or `ethers.utils.keccak256(ethers.utils.toUtf8Bytes("MINTER_ROLE"))` in javascript + +This makes it so that only your specific address can mint from the contract, it will error otherwise. + +Complete the role update by clicking `write` and sign the sponsored transaction. + +#### Update metadata + +Next, you'll need to update the metadata with your media or assets for your contract, which can be done by [following this guide](/solutions/collectibles/metadata/800-manage-contract-metadata-builder). + +#### Contract sponsoring + +Finally, in order to sponsor the contract follow [this guide](/solutions/builder/gas-tank) to sponsor a contract. + +## 3. Use EthAuthProof to prevent EOA DDoS + +Now that we have a contract deployed, we can return to the cloudflare worker directory and project, and install `ethers` and `0xsequence` to get access to sequence APIs in order to perform a proof validation that the request is coming from a trusted source, a sequence wallet. + +``` +pnpm install 0xsequence @0xsequence/network +``` + +Then, we have to add a type of middleware, after we check if it's a POST or GET request. If it's a POST request, verify that the passed in `proofString` and `address` are valid, as well as the environment variables. + +The code scaffold placed into `src/index.ts` would look like this, with `callContract` and `getBlockNumber` mocked out, using the mentioned verification step of calling `verify` before any contract call. + +```ts +import { sequence } from '0xsequence' +import { networks, findSupportedNetwork } from '@0xsequence/network' + +export interface Env { + PKEY: string; // Private key for EOA wallet + CONTRACT_ADDRESS: string; // Deployed ERC1155 or ERC721 contract address + PROJECT_ACCESS_KEY: string; // From sequence.build + CHAIN_HANDLE: string; // Standardized chain name – See https://docs.sequence.xyz/multi-chain-support +} + +// use the sequence api to verify proof came from a sequence wallet +const verify = async (chainId: string, walletAddress: string, ethAuthProofString: string): Promise => { + const api = new sequence.api.SequenceAPIClient('https://api.sequence.app') + const { isValid } = await api.isValidETHAuthProof({ + chainId, walletAddress, ethAuthProofString + }) + return isValid +} + +async function handleRequest(request: Request, env: Env, ctx: ExecutionContext): Promise { + if (env.PKEY === undefined || env.PKEY === '') { + return new Response('Make sure PKEY is configured in your environment', { status: 400 }) + } + + if (env.CONTRACT_ADDRESS === undefined || env.CONTRACT_ADDRESS === '') { + return new Response('Make sure CONTRACT_ADDRESS is configured in your environment', { status: 400 }) + } + + if (env.PROJECT_ACCESS_KEY === undefined || env.PROJECT_ACCESS_KEY === '') { + return new Response('Make sure PROJECT_ACCESS_KEY is configured in your environment', { status: 400 }) + } + + if (env.CHAIN_HANDLE === undefined || env.CHAIN_HANDLE === '') { + return new Response('Make sure CHAIN_HANDLE is configured in your environment', { status: 400 }) + } + + const chainConfig = findSupportedNetwork(env.CHAIN_HANDLE) + + if (chainConfig === undefined) { + return new Response('Unsupported network or unknown CHAIN_HANDLE', { status: 400 }) + } + + // POST request + if (request.method === "POST") { + // parse the request body as JSON + const body = await request.json(); + const { proof, address, tokenId }: any = body; + try { + // check that the proof is valid + if(await verify(env.CHAIN_HANDLE, address, proof)){ + try{ + // mocked call + const res = await callContract(request, env, address, tokenId) + return new Response(`${res.hash}`, { status: 200 }) + } catch (err: any) { + console.log(err) + return new Response(`Something went wrong: ${JSON.stringify(err)}`, { status: 400 }) + } + } else { + return new Response(`Unauthorized`, { status: 401 }) + } + } catch(err: any){ + return new Response(`Unauthorized ${JSON.stringify(err)}`, { status: 401 }) + } + } + // GET request + else { + try { + // mocked call + const res = await getBlockNumber(env.CHAIN_HANDLE, request) + return new Response(`Block Number: ${res}`) + } catch(err: any){ + return new Response(`Something went wrong: ${JSON.stringify(err)}`, { status: 500 }) + } + } +} + +const getBlockNumber = async (chainId: string, request: Request): Promise => { + return chainId +} + +const callContract = async (request: Request, env: Env, address: string, tokenId: number): Promise => { + return { hash: "0x" } as any +} + +export default { + async fetch(request: Request, env: Env, ctx: ExecutionContext) { + // Process the request and create a response + const response = await handleRequest(request, env, ctx); + + // Set CORS headers + response.headers.set("Access-Control-Allow-Origin", "*"); + response.headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + response.headers.set("Access-Control-Allow-Headers", "Content-Type"); + + // return response + return response; + } +}; +``` + +#### Add cloudflare environment variables +Then, pass in the environment variables for your build by updating the `[vars]` section in your `wrangler.toml`. + +``` +[vars] +PKEY = "" # Private key for EOA wallet +CONTRACT_ADDRESS = "" # // Deployed ERC1155 or ERC721 contract address +PROJECT_ACCESS_KEY = "" # From sequence.build +CHAIN_HANDLE = "" # // Standardized chain name – See https://docs.sequence.xyz/multi-chain-support +``` + +#### Implement window object in wrangler template + +It should be noted, if you try to deploy this you'll get a missing `window` object required by the web3 modules. + +To prevent this, add the following line to your `wrangler.toml` file to make the environment compatible. + +``` +... +node_compat = true # add this line +... +``` + +#### Testing the deploy + +You can now redeploy using `wrangler deploy` + +And perform a curl request to test your endpoint like such: + +``` +curl -X POST https://your-worker.your-subdomain.workers.dev \ +-H "Content-Type: application/json" \ +-d '{"proof": "", "address": "", "tokenId": 0 }' + +... invalid proof string ... + +# and if you replace with actual proof (from a wallet client login) and address on polygon, it should return +success +``` + +You can acquire your wallet address proof by using this [dapp](https://73eql-hyaaa-aaaad-qf5bq-cai.ic.fleek.co/) and follow the below steps. + +#### Using the ETHAuthProof Viewer dapp + +When you arrive on the page, the first thing you should do is select a network. + +Then you have an option to either connect and generate the Proof, or, generate a local wallet + +![ETHAuthProof Viewer](/img/relayer/ethauthproof_viewer_connect.png) + +Press the `connect` button and then `copy to clipboard`. + +![ETHAuthProof Viewer copy to clipboard](/img/relayer/ethauthproof_viewer_copy.png) + +It should be noted, it is best not to share this `ETHAuthProof` with anyone as this means someone can prove ownership of your wallet and interact with specific APIs. + +Finally, replace the `url` with your app from [this step](/guides/templates/03-mint-collectibles-serverless#deploy-test), the `` with the generated value copied from the viewer dapp, and `` with your wallet address and it should return just the mocked `0x` string. + +``` +curl -X POST https://your-worker.your-subdomain.workers.dev \ +-H "Content-Type: application/json" \ +-d '{"proof": "", "address": "", "tokenId": 0 }' +``` + +## 4. Mint a collectible to wallet + +Finally, to deploy and mint a collectible from the sponsored contract address, we install the following packages + +``` +pnpm install @0xsequence/auth ethers@5.7.2 +``` + +and implement the `callContract` and `getBlockNumber` methods previously mocked out as follows: + +```ts +import { ethers } from 'ethers' +import { Session, SessionSettings } from '@0xsequence/auth' + +... + +const getBlockNumber = async (chainId: string, request: Request): Promise => { + const nodeUrl = `https://nodes.sequence.app/${chainId}` + const provider = new ethers.providers.JsonRpcProvider({ url: nodeUrl, skipFetchSetup: true }) + return await provider.getBlockNumber() +} + +const callContract = async (request: Request, env: Env, address: string, tokenId: number): Promise => { + + const nodeUrl = `https://nodes.sequence.app/${env.CHAIN_HANDLE}` + const relayerUrl = `https://${env.CHAIN_HANDLE}-relayer.sequence.app` + const provider = new ethers.providers.JsonRpcProvider({ url: nodeUrl, skipFetchSetup: true }) + const contractAddress = env.CONTRACT_ADDRESS + + // create EOA from private key + const walletEOA = new ethers.Wallet(env.PKEY, provider); + + // instantiate settings + const settings: Partial = { + networks: [{ + ...networks[findSupportedNetwork(env.CHAIN_HANDLE)!.chainId], + rpcUrl: findSupportedNetwork(env.CHAIN_HANDLE)!.rpcUrl, + provider: provider, + relayer: { + url: relayerUrl, + provider: { + url: findSupportedNetwork(env.CHAIN_HANDLE)!.rpcUrl + } + } + }], + } + + // create a single signer sequence wallet session + const session = await Session.singleSigner({ + settings: settings, + signer: walletEOA, + projectAccessKey: env.PROJECT_ACCESS_KEY + }) + + // get signer + const signer = session.account.getSigner(findSupportedNetwork(env.CHAIN_HANDLE)!.chainId) + + // create interface from partial abi + const collectibleInterface = new ethers.utils.Interface([ + 'function mint(address to, uint256 tokenId, uint256 amount, bytes data)' + ]) + + // create calldata + const data = collectibleInterface.encodeFunctionData( + 'mint', [address, tokenId, 1, "0x00"] + ) + + // create transaction object + const txn = { to: contractAddress, data } + + try { + return await signer.sendTransaction(txn) + } catch (err) { + throw err + } +} +``` + +Once these steps are complete, you can redeploy and test with the steps outlined in this [prior step](/guides/templates/03-mint-collectibles-serverless#testing), and this time the POST request should return a transaction hash for the completed mint and the GET request would return a block number. + +If you want to browse the full code, see [an example implementation here](https://github.com/0xsequence-demos/cloudflare-worker-sequence-relayer) diff --git a/docs/pages/guides/templates/template-cloudflare-relayer.mdx b/docs/pages/guides/templates/template-cloudflare-relayer.mdx deleted file mode 100644 index e823b36a0a..0000000000 --- a/docs/pages/guides/templates/template-cloudflare-relayer.mdx +++ /dev/null @@ -1,3 +0,0 @@ -## Deploy an in-game collectibles contract -## Query contract details -## Fetch token balances of a wallet diff --git a/docs/pages/guides/templates/template-embedded-wallet.mdx b/docs/pages/guides/templates/template-embedded-wallet.mdx index e823b36a0a..fd61a1c4e4 100644 --- a/docs/pages/guides/templates/template-embedded-wallet.mdx +++ b/docs/pages/guides/templates/template-embedded-wallet.mdx @@ -1,3 +1,50 @@ -## Deploy an in-game collectibles contract -## Query contract details -## Fetch token balances of a wallet +# Quickstart + +## Try a Demo +:::info +Try out seamless UX of our embedded wallet at our [demo](https://0xsequence.github.io/demo-waas-auth/) +::: + + +## Template +:::info +Get started quickly with a [template](https://github.com/0xsequence/demo-waas-auth) leveraging our embedded wallet. +::: + + + + +## Getting Started + +### SDK Installation + +We provide TypeScript and Unity SDKs for the Embedded Wallet authentication system. You can install the TypeScript SDK with: + +```bash +pnpm install @0xsequence/waas +``` + +For more information on the Unity Embedded Wallet SDK, please refer to the TODO add link [Unity SDK documentation](#TODO) + +### Project Setup + +Sequence Embedded Wallet is currently only available as a closed beta. To start using the Embedded Wallet SDKs, you'll need to contact the Sequence team and acquire API credentials. Once this is done, you will be provided with two keys: + +- Project access key +- Embedded Wallet configuration key + +### Library Setup + +To start using Sequence Embedded Wallet SDK, you'll need to create a new instance of the `waas` class: + +```typescript +import { SequenceWaaS } from '@0xsequence/waas' + +const waas = new SequenceWaaS({ + projectAccessKey: `${process.env.PROJECT_ACCESS_KEY}`, + waasConfigKey: `${process.env.WAAS_CONFIG_KEY}`, + network: 'mumbai' +}, defaults.TEST) +``` + +Note that the library is operational, but it can't be used to interact with any wallet until you have authenticated **as a user**. \ No newline at end of file diff --git a/docs/pages/guides/templates/template-go-relayer.mdx b/docs/pages/guides/templates/template-go-relayer.mdx deleted file mode 100644 index e823b36a0a..0000000000 --- a/docs/pages/guides/templates/template-go-relayer.mdx +++ /dev/null @@ -1,3 +0,0 @@ -## Deploy an in-game collectibles contract -## Query contract details -## Fetch token balances of a wallet diff --git a/docs/pages/indexer/getting-started.mdx b/docs/pages/indexer/getting-started.mdx deleted file mode 100644 index f357752e5d..0000000000 --- a/docs/pages/indexer/getting-started.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# Getting started - -start.. diff --git a/docs/pages/sdk/go.mdx b/docs/pages/sdk/go.mdx deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/pages/sdk/go/overview.mdx b/docs/pages/sdk/go/overview.mdx new file mode 100644 index 0000000000..e213bf67b3 --- /dev/null +++ b/docs/pages/sdk/go/overview.mdx @@ -0,0 +1,13 @@ +### Go + +A complete Sequence SDK is also available in Go: https://github.com/0xsequence/go-sequence. + +[go-sequence](https://github.com/0xsequence/go-sequence) is the equivalent of [0xsequence](https://github.com/0xsequence/sequence.js) +but for Go / Golang backends. In fact, all of Sequence's infrastructure is written in Go and is built with [go-sequence](https://github.com/0xsequence/go-sequence). + + +### ethkit + +As part of the Sequence open source tools, our team has also built [ethkit](https://github.com/0xsequence/ethkit), which +is an Ethereum dev toolkit for Go backends. [ethkit](https://github.com/0xsequence/ethkit) supports EOA wallets, +and you can think of it like `ethers.js` but for Go. \ No newline at end of file diff --git a/docs/pages/sdk/sequence-kit/01-overview.mdx b/docs/pages/sdk/sequence-kit/01-overview.mdx new file mode 100644 index 0000000000..31b089c92f --- /dev/null +++ b/docs/pages/sdk/sequence-kit/01-overview.mdx @@ -0,0 +1,17 @@ +# SequenceKit SDK + +Sequence Kit 🧰 is the ultimate toolkit for effortlessly integrating web3 wallets into your applications, providing your users with a smooth and secure onboarding experience. With our robust tools built on the popular [wagmi](https://wagmi.sh/) library, unlock a realm of possibilities in the world of web3. + +## Key Features + +- **Universal Connections**: Seamlessly connect via popular social logins such as Facebook, Google, Discord, and more! Your users will enjoy a smooth, secure onboarding process. 🔐🪪 + +- **Web3 Wallet Integration**: Effortlessly integrate with leading web3 wallets like WalletConnect and MetaMask. Unleash the power of blockchain with just a few clicks! 🦊 ⛓️ + +- **Embedded Wallet Experience**: Provide your users with a comprehensive embedded wallet, enabling them to manage their coins and collectibles all within your own application. 👛 🖼️ 🪙 + +Explore the potential of Sequence Kit by trying out our [demo](https://0xsequence.github.io/kit)! + +# Next Steps + +Ready to integrate Sequence Kit into your application? Check out our [Getting Started guide](#TODO). If you're already familiar with Sequence Kit dive into the available [configuration options](#TODO) or take a look at the [checkout](#TODO). \ No newline at end of file diff --git a/docs/pages/sdk/sequence-kit/_category_.json b/docs/pages/sdk/sequence-kit/_category_.json deleted file mode 100644 index 84dfe98e71..0000000000 --- a/docs/pages/sdk/sequence-kit/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Sequence Kit", - "link": { - "type": "doc", - "id": "wallet/connectors/kit/overview" - } -} diff --git a/docs/pages/sdk/typescript/01-overview.mdx b/docs/pages/sdk/typescript/01-overview.mdx new file mode 100644 index 0000000000..0738a600b2 --- /dev/null +++ b/docs/pages/sdk/typescript/01-overview.mdx @@ -0,0 +1,18 @@ +--- +slug: /wallet +--- + +# Wallet + +Sequence Wallet gives you a friendly, non-custodial wallet for your users with multi-chain support and seamless integration. + +
+ +
+ +Most wallets for Ethereum have a single private key that has full control over a wallet, i.e. an Externally Owned Account (EOAs). +However, a Sequence wallet is a Smart Contract that is deployed on the blockchain and which can be controlled by multiple private keys. +These keys are meant to be controlled by the wallet owner and provide added security since more than one of these keys would need to be +compromised for the wallet to be compromised. + + diff --git a/docs/pages/sdk/typescript/02-quickstart.mdx b/docs/pages/sdk/typescript/02-quickstart.mdx new file mode 100644 index 0000000000..7b5dd563fb --- /dev/null +++ b/docs/pages/sdk/typescript/02-quickstart.mdx @@ -0,0 +1,65 @@ +# Quickstart + +## Try a Demo +:::info +Try out the Universal Wallet leveraging SequenceKit at our [demo](https://0xsequence.github.io/kit/) +::: + + +## Template +:::info +Get started quickly with a [template](https://github.com/0xsequence/kit/tree/master/examples/react) using SequenceKit +::: + + +## Install for existing project + +We provide TypeScript and Unity SDKs for the Embedded Wallet authentication system. You can install the TypeScript SDK with: + +```bash +pnpm install @0xsequence/waas +``` + +For more information on the Unity Embedded Wallet SDK, please refer to the [Unity SDK documentation](#TODO). + +The sequence.js SDK is composed of several sub-packages combined into a single meta-package called `0xsequence`. +To add the SDK to your project, add a dependency on 0xsequence to your package.json: + +```sh +npm install 0xsequence ethers +``` +or + +```sh +pnpm install 0xsequence ethers +``` +or + +```sh +yarn add 0xsequence ethers +``` + +If you know that your project only requires specific sub-packages, you can also depend on those directly with +`npm add @0xsequence/`. + +Your package.json should look something like this (actual version may vary): +```json +{ + "name": "my-dapp", + ... + "dependencies": { + "0xsequence": "^1.0.0", + "ethers": ^5.7.0" + ... + } +} +``` + +#### CDN distribution as native JS + +Optionally, `0xsequence` can be installed as a JS script source (UMD distribution) via: + +```js + + +``` diff --git a/docs/pages/sdk/typescript/03-guides/01-connect-wallet.mdx b/docs/pages/sdk/typescript/03-guides/01-connect-wallet.mdx new file mode 100644 index 0000000000..540853519d --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/01-connect-wallet.mdx @@ -0,0 +1,303 @@ +# Connect Wallet + +Sequence is a very flexible wallet which allow users multiple ways to connect / access their wallet. This includes: + +1. **On-demand Ethereum web wallet for new users** via [0xsequence](https://www.npmjs.com/package/0xsequence) npm package + https://sequence.app -- this option allows + developers to offer users an on-demand web3 wallet. No user install required -- any browser will _just work_, and users + can onboard with a familiar Web2 experience. Think of it like _Paypal / Stripe but for web3_. + +2. **Surf all of web3** via [Sequence Wallet Chrome Extension](https://chrome.google.com/webstore/detail/sequence-wallet/ocmccklecaalljlflmclidjeclpcpdim?hl=en) -- users + who have the Sequence Wallet Chrome Extension installed are able to access any Ethereum-compatible Dapp on the Web :) Just like how MetaMask works, + but of course with a bunch of the benefits of Sequence. + +3. **Mobile phone access** via [WalletConnect](https://walletconnect.com/) support within Sequence Wallet -- users are able to communicate with their wallets remotely + via the awesome Wallet Connect protocol. This is an excellent option if using Sequence Wallet from your mobile phone and want to connect + your wallet to a desktop dapp. + +Sequence Wallet is built on Web Browser (W3C) and Ethereum web3 standards -- and is available everywhere that a modern browser is able to run. +We've carefully designed the wallet for simple onboarding, while maintaining security for users, and allowing users to progressively +increase the level of their security through additional keys and measures. + +This means, that if you've developed a dapp to work with MetaMask, then Sequence will work too without any changes. If you're +using web3.js or ethers.js, Sequence will just work too. This is the beauty of interoperability on web3 :) + +## Connecting your dapp with `0xsequence` + +:::info A delightful wallet without requiring your users to install anything :D +By integrating `0xsequence`, users may access your dapp without having to install any special extensions, +and the wallet also works on mobile browsers! +::: + +Your dapp can connect to your user's wallet by first instantiating the Wallet provider: + +```ts +import { sequence } from "0xsequence"; + +const projectAccessKey = '' + +// This assumes your dapp runs on Ethereum mainnet +const wallet = sequence.initWallet(projectAccessKey); + +// If your dapp runs on a different EVM-compatible blockchain, you can specify its name +// const wallet = sequence.initWallet(projectAccessKey, { defaultNetwork: 'polygon' }); +``` + +Note that is possible to retrieve the above instance by using the `getWallet()` method: + +```ts +import { sequence } from "0xsequence"; +const wallet = sequence.getWallet(); +``` + +Once you have the instance, you can connect to the wallet: + +```ts +const connectDetails = await wallet.connect({ + app: "Your Dapp name", + authorize: true, + // And pass settings if you would like to customize further + settings: { + theme: "light", + bannerUrl: "https://yoursite.com/banner-image.png", // 3:1 aspect ratio, 1200x400 works best + includedPaymentProviders: ["moonpay", "ramp"], + defaultFundingCurrency: "matic", + lockFundingCurrencyToDefault: false, + }, +}); + +console.log("user accepted connect?", connectDetails.connected); +console.log( + "users signed connect proof to valid their account address:", + connectDetails.proof +); +``` + +You can pick/limit the available sign in options with `signInOptions`. Will be ignored if user is already signed in. + +```ts +const wallet = sequence.getWallet(); + +await wallet.connect({ + app: "Your Dapp name", + settings: { signInOptions: ["google"] }, +}); +``` + +After you connect, you can use `wallet.openWallet()` to open the wallet: + +```ts +const wallet = sequence.getWallet(); +wallet.openWallet(); +``` + +You can also optionally pass a path, and use `openWithOptions` intent to pass settings when you open the wallet: + +```ts +const settings: Settings = { + theme: "dark", + bannerUrl: "https://yoursite.com/banner-image.png", // 3:1 aspect ratio, 1200x400 works best + includedPaymentProviders: ["moonpay", "ramp"], + defaultFundingCurrency: "eth", + lockFundingCurrencyToDefault: false, +}; + +const intent: OpenWalletIntent = { + type: "openWithOptions", + options: { + settings: settings, + }, +}; + +const wallet = sequence.getWallet(); + +const path = "wallet/add-funds"; +wallet.openWallet(path, intent); +``` + +:::tip Check out some example Dapp source code +For a complete examples, see [Demo-Dapp](https://github.com/0xsequence/demo-dapp) and [Demo-Dapp-Web3Modal](https://github.com/0xsequence/demo-dapp-web3modal). +::: + +:::caution Avoid Browsers Blocking Sequence Popup +Most browsers will block popups if they are called outside of user-triggered event handlers like `onclick`, or when it takes too long to process between the user action and the actual window + +Read more about browser popup-blocking [here](https://javascript.info/popup-windows#popup-blocking). +::: + +![Sequence on-demand sign in](/img/sign-in-fresh.png) + +![Sequence on-demand sign in, connect](/img/sign-in-connect.png) + +## Wallet Login and Connect Options + +Dapps with direct sequence integration can specify a `ConnectOptions` object when running `wallet.connect()`. + +``` +const connectDetails = await wallet.connect(connectOptions) +``` + +The option parameters are described below. + +#### **app** + +App name of the dapp which will be announced to user on connect screen. + +Example: `await wallet.connect({ app: 'My defi app' })` + +#### **appProtocol** + +Custom protocol for auth redirect (unity/unreal). + +#### **origin** + +Origin hint of the dapp's host opening the wallet. This value will automatically be determined and verified for integrity, and can be omitted. + +#### **expiry** + +Expiry number (in seconds) that is used for ETHAuth proof. Default is 1 week in seconds. + +Example: `await wallet.connect({ expiry: 36000 })` + +#### **authorize** + +`authorize` will perform an ETHAuth eip712 signing and return the proof to the dapp. + +Example: `await wallet.connect({ authorize: true })` + +#### **authorizeNonce** + +`authorizeNonce` is an optional number to be passed as ETHAuth's nonce claim for replay protection. + +Example: `await wallet.connect({ authorizeNonce: 123 })` + +#### **refresh** + +`refresh` flag will force a full re-connect (ie. disconnect then connect again). + +Example: `await wallet.connect({ refresh: true })` + +#### **keepWalletOpened** + +`keepWalletOpened` will keep the wallet window open after connecting. The default is to automatically close the wallet after connecting. + +Example: `await wallet.connect({ keepWalletOpened: true })` + +#### **askForEmail** + +`askForEmail` will ask user whether they want to share the email they use to sign in to wallet while connecting, and will be returned in `connectDetails`. + +Example: `await wallet.connect({ askForEmail: true })` + +#### **settings.theme** + +Name of one of the available theme provided by sequence the sequence wallet will be rendered with. + +Example: `await wallet.connect({ settings: {theme: "light"}}` + +#### **settings.bannerUrl** + +URL of a banner image users will see when connecting or logging into your dapp. The banner image should follow a 3:1 aspect ration where 1200x400 works best. + +Example: `await wallet.connect({ settings: {bannerUrl: "https://yoursite.com/banner-image.png"}}` + +#### **settings.signInWith** + +Specify `signInWith` with a supported auth provider to automatically sign in the user with that provider only. Will be ignored if user is already signed in. + +Example: `await wallet.connect({ settings: {signInWith: "google"}}` + +Supported Providers: "google", "discord", "twitch", "apple", "facebook" + +#### **settings.signInWithEmail** + +Specify signInWithEmail with an email address to allow user automatically sign in with the email option. Will be ignored if user is already signed in. + +Example: `await wallet.connect({ settings: {signInWithEmail: "user@email.com"}}` + +#### **settings.signInOptions** + +Specify signInOptions to pick/limit the available sign in options. Will be ignored if user is already signed in. + +Example: `await wallet.connect({ settings: {signInOptions: ["email", "google", "apple"]}}` + +#### **settings.includedPaymentProviders** + +List of payment providers users will be able to access. By default, users can access all payment providers integrated in Sequence. + +Example: `await wallet.connect({ settings: {includedPaymentProviders: ["moonpay", "ramp"]}}` + +#### **settings.defaultFundingCurrency** + +The tag of the default currency to show when users open the payment provider page. The currency has to be supported by the payment providers integrated in sequence. + +Example: `await wallet.connect({ settings: {defaultFundingCurrency: "usdc"}}` + +#### **settings.defaultPurchaseAmount** + +Use to specify a default purchase amount, as an integer, for prefilling the funding amount. If not specified, the default is 100. + +Example: `await wallet.connect({ settings: {defaultPurchaseAmount: 200}}` + +#### **settings.lockFundingCurrencyToDefault** + +Whether to only allow users to purchase the default currency specified by the `defaultFundingCurrency` option. If set to false, users will also be able to purchase other tokens. locking the default funding currency can be useful to prevent users from purchasing the wrong currency or the currency on the wrong chain. + +Example: `await wallet.connect({ settings: {defaultFundingCurrency: true}}` + +## Connecting your dapp with `web3.js` or `ethers.js` + +For a full example of a dapp which supports Sequence (on-demand + chrome extension), Metamask, and WalletConnect +please see the [Demo-Dapp-Web3Modal repo](https://github.com/0xsequence/demo-dapp-web3modal). + +![Sequence Web3Modal Integration](/img/web3modal.png) + +## Connecting to any Ethereum dapp with the Sequence Wallet Chrome Extension + +Sequence Chrome Extension: [Install](https://chrome.google.com/webstore/detail/sequence-wallet/ocmccklecaalljlflmclidjeclpcpdim?hl=en) + +![Sequence Chrome Extension](/img/build/seq-chrome-store.png) + +## Connecting via `WalletConnect` + +Sequence already supports connecting to dapps via [WalletConnect](https://walletconnect.com). +If your dapp already supports WalletConnect, and you don't need Sequence-specific functionality, nothing more needs to be done. +From the user's perspective, the WalletConnect flow behaves as follows. + +Taking [Uniswap](https://app.uniswap.org) as an example, the user is prompted to connect their wallet using one of multiple possible protocols. + + + +The user selects the WalletConnect option. + + + +A QR code is displayed, which can be scanned by Sequence. +Alternatively, the user can also choose to copy the connection details via their OS clipboard. + + + +Back in the Sequence interface, the user chooses "Scan". + + + +The QR code from the dapp is scanned. +Alternatively, the code is pasted from the OS clipboard if the user chose that previously. + + + +The user confirms the connection request. + + + +The connection succeeded, and the dapp is updated to reflect that. + + + +While connected, the dapp is able to make signing requests to Sequence. +Sequence will always prompt for confirmation from the user for any activity initiated by the dapp. + + + +Once the user has finished using the dapp, they can disconnect the wallet via the session menu. + + diff --git a/docs/pages/sdk/typescript/03-guides/02-auth-address.mdx b/docs/pages/sdk/typescript/03-guides/02-auth-address.mdx new file mode 100644 index 0000000000..08dadf23fe --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/02-auth-address.mdx @@ -0,0 +1,84 @@ +# Authenticate Users with Message Signature + +## Ask for the wallet address + +To get the user's Sequence wallet address: + +```ts +const wallet = sequence.getWallet() +const address = wallet.getAddress() +console.log(address) +``` + +## Authenticate wallet + +In many cases, you'll want your users to connect and then verify they do control this wallet address. Applications typically do this by asking the user +to sign a message with their wallet, and then verify the signature from the user to ensure its integrity. + +As this is such a common workflow, Sequence can automatically authenticate the account address at the same time +while the user is prompt to connect their wallet to your dapp. This allows the user experience to be simpler and +more seamless. + +```ts +import { sequence } from '0xsequence' + +const wallet = sequence.getWallet() + +const connectDetails = await wallet.connect({ + app: 'Your Dapp name', + authorize: true // <---<<< this will automatically sign+verify a EIP712 message when user clicks "Connect" +}) +``` + +It will look like this to your users: +Sequence on-demand sign in, connect + +In the above example, we pass `authorize: true` to the `connect()` function, which will automatically have the user +sign a **EIP712 signed message** to prove their identity. This allows you to then easily authenticate the connected +wallet address with absolute certainty. + +You can find the signed message proof returned in `connectDetails.proof`, which is an EIP712 signed object using +a simple convention from [ethauth](https://github.com/0xsequence/ethauth.js). NOTE: EIP712 allows you to use an actual object for +signing instead of just a plain-text string. + + +## Authenticate wallet server-side + +The above example demonstrates how to connect and verify the user's identity in your dapp on the client-side, +but if you'd like to authenticate the Sequence authorization proof on your server, then you can do so with the following snippet: + +```ts +import { ValidateSequenceWalletProof } from '@0xsequence/auth' +import { commons, v2 } from '@0xsequence/core' +import { ETHAuth } from '@0xsequence/ethauth' +import { trackers } from '@0xsequence/sessions' +import * as ethers from 'ethers' + +// ... + +const rpcUrl = 'https://polygon-mainnet.infura.io/v3/' +const provider = new ethers.providers.JsonRpcProvider(rpcUrl) + +// create an EIP-6492-aware ETHAuth proof validator +const validator = ValidateSequenceWalletProof( + () => new commons.reader.OnChainReader(provider), + new trackers.remote.RemoteConfigTracker('https://sessions.sequence.app'), + v2.DeployedWalletContext +) +const ethauth = new ETHAuth(validator) +await ethauth.configJsonRpcProvider(rpcUrl) + +try { + const proof = await ethAuth.decodeProof(connectDetails.proof.proofString) + console.log(`proof for address ${proof.address} is valid`) +} catch (err) { + console.log(`invalid proof -- do not trust address: ${err}`) +} +``` + +See the [Go Sequence SDK](https://github.com/0xsequence/go-sequence) on using Sequence in your Go applications. + +If your server is written in a language other than Javascript/Typescript or Go, all you have to do is validate +the signature with [EIP1271, the standard method for validating signed messages for a smart wallet](https://eips.ethereum.org/EIPS/eip-1271). + +As always, if you have any questions or require help, reach out to us on [Discord](https://discord.gg/sequence). diff --git a/docs/pages/sdk/typescript/03-guides/03-sign-message.mdx b/docs/pages/sdk/typescript/03-guides/03-sign-message.mdx new file mode 100644 index 0000000000..bf2424d8b4 --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/03-sign-message.mdx @@ -0,0 +1 @@ +# TODO - Replace with Code Groups from Vocs diff --git a/docs/pages/sdk/typescript/03-guides/04-session-keys.mdx b/docs/pages/sdk/typescript/03-guides/04-session-keys.mdx new file mode 100644 index 0000000000..e35a392240 --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/04-session-keys.mdx @@ -0,0 +1,85 @@ +# No-Wallet-Confirmation Signatures +It is possible to build an application where users sign messages without requiring a confirmation in their Sequence wallet every time. This is possible using *session keys*, or ephemeral keys. + +# Session Keys +Session keys are ephemeral private keys that can be generated and stored client-side, typically in a user's local storage. They provide a convenient and secure way for users to authorize specific actions in a decentralized application without requiring them to confirm each action through their primary wallet. + +By signing a message with their primary wallet (e.g., Sequence Wallet), users can authorize a session key to act on their behalf for a limited time or scope. Applications can then interpret signed messages from the session key as if they were coming directly from the user's wallet, streamlining the user experience. + +Session keys are particularly useful for applications that require frequent user interactions, as they help reduce the number of wallet confirmations needed, while still maintaining a secure and verifiable authentication process. + +# Using Session keys with Sequence + +### 1. Initialize Sequence Wallet and Connect +```javascript +import { Wallet } from '@0xsequence/wallet' +import { ethers } from 'ethers' + +const wallet = new Wallet() +await wallet.connect() + +const signer = wallet.getSigner() +const userAddress = signer.getAddress() +``` + +### 2. Generate a Session Key +Create a new ephemeral private key, store it in local storage, and derive the associated address: + +```javascript +const sessionPrivateKey = ethers.utils.randomBytes(32) +localStorage.setItem('sessionPrivateKey', ethers.utils.hexlify(sessionPrivateKey)) +const sessionWallet = new ethers.Wallet(sessionPrivateKey) +const sessionAddress = await sessionWallet.getAddress() +``` + +### 3. Sign Authorization Message +Sign a message with the user's Sequence Wallet to authorize the session key: + +```javascript +const authorizationMessage = `Authorize this device to play this game.` +const signature = await signer.signMessage(authorizationMessage) +``` + +### 4. Verify Authorization Signature + +Verify the signature on the server or client side using Sequence utility functions: + +```javascript +const provider = wallet.getProvider() +const chainId = await wallet.getChainId() + +const isValid = await wallet.utils.isValidMessageSignature( + userAddress, + authorizationMessage, + signature, + chainId +) + +if (isValid) { + console.log('Session key authorized') +} else { + console.log('Session key not authorized') +} +``` + +### 5. Sign Message with Session Key +Use the session key to sign a message client-side without user interaction: + +```javascript +const message = 'Perform action without wallet confirmation' +const sessionSignature = await sessionWallet.signMessage(message) +``` + +### 6. Verify Session Signature +Verify the session signature on the server or client side: + +```javascript +const recoveredSessionAddress = ethers.utils.verifyMessage(message, sessionSignature) +if (recoveredSessionAddress === sessionAddress) { + console.log('Session signature valid') +} else { + console.log('Session signature invalid') +} +``` + +**Note**: You should retrieve the session key stored in local storage upon loading the application and only create a new session key if none can be found. \ No newline at end of file diff --git a/docs/pages/sdk/typescript/03-guides/05-send-transaction.mdx b/docs/pages/sdk/typescript/03-guides/05-send-transaction.mdx new file mode 100644 index 0000000000..10edc1941b --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/05-send-transaction.mdx @@ -0,0 +1,16 @@ +# Sending Transactions + +Signing a transaction will only retrieve the signed payload. +If you want the wallet to actually dispatch the transaction to the network as well, that requires only a small modification to the previous example (note the change from `signTransactions` to `sendTransaction`): + +```ts +const transaction = { + to: recipientAddress, + value: 1000000000000000000 +} + +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransaction(transaction) +console.log(txnResponse) + +``` diff --git a/docs/pages/sdk/typescript/03-guides/06-send-erc20.mdx b/docs/pages/sdk/typescript/03-guides/06-send-erc20.mdx new file mode 100644 index 0000000000..861d017aa5 --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/06-send-erc20.mdx @@ -0,0 +1,56 @@ +# Sending ERC-20 Tokens + +You can ask the wallet to send a single ERC-20 token transfer: + +```ts +const erc20Interface = new ethers.utils.Interface([ + 'function transfer(address _to, uint256 _value)' +]) + +// Encode an ERC-20 token transfer to recipient of the specified amount +const data = erc20Interface.encodeFunctionData( + 'transfer', [recipientAddress, amount] +) + +const transaction = { + to: daiContractAddress, + data +} + +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransaction(transaction) +console.log(txnResponse) + +``` + +With batching functionality, you can send multiple token transfers in a single native transaction: + +```ts +const erc20Interface = new ethers.utils.Interface([ + 'function transfer(address _to, uint256 _value)' +]) + +// Encode two different ERC-20 token transfers +const data1 = erc20Interface.encodeFunctionData( + 'transfer', [recipient1Address, amount1] +) +const data2 = erc20Interface.encodeFunctionData( + 'transfer', [recipient2Address, amount2] +) + +const transaction1 = { + to: daiContractAddress, + data: data1 +} + +const transaction2 = { + to: daiContractAddress, + data: data2 +} + +// Send a multiple transactions as a single bundle which is executed as one transaction on chain. +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransaction([transaction1, transaction2]) +console.log(txnResponse) + +``` diff --git a/docs/pages/sdk/typescript/03-guides/07-send-erc721.mdx b/docs/pages/sdk/typescript/03-guides/07-send-erc721.mdx new file mode 100644 index 0000000000..717b535bc6 --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/07-send-erc721.mdx @@ -0,0 +1,58 @@ +# Sending ERC-721 (NFT) Tokens + +Sending an ERC-721 NFT is similar to sending an ERC-20 token. +The only notable difference is in the contract standard itself: + +```ts +const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' +]) + +// Encode the transfer of the NFT tokenId to recipient +const address = await wallet.getAddress() +const data = erc721Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipientAddress, tokenId] +) + +const transaction = { + to: erc721TokenAddress, + data +} + +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransaction(transaction) +console.log(txnResponse) + +``` + +With batching functionality, you can send multiple token transfers in a single native transaction: + +```ts +const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' +]) + +// Encode two different ERC-721 token transfers +const data1 = erc721Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipient1Address, amount1] +) +const data2 = erc721Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipient2Address, amount2] +) + +const transaction1 = { + to: erc721ContractAddress, + data: data1 +} + +const transaction2 = { + to: erc721ContractAddress, + data: data2 +} + +// Send a multiple transactions as a single bundle which is executed as one transaction on chain. +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransactionBatch([transaction1, transaction2]) +console.log(txnResponse) + +``` diff --git a/docs/pages/sdk/typescript/03-guides/08-send-erc1155.mdx b/docs/pages/sdk/typescript/03-guides/08-send-erc1155.mdx new file mode 100644 index 0000000000..fb7f1b34fa --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/08-send-erc1155.mdx @@ -0,0 +1,57 @@ +# Sending ERC-1155 (Collectible) Tokens + +Sending an ERC-1155 collectible is similar to sending an ERC-20 token. +The only notable difference is in the contract standard itself: + +```ts +const erc1155Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data)' +]) + +// Encode the transfer of the collectible to recipient +const address = await wallet.getAddress() +const data = erc1155Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipientAddress, tokenId, amount, '0x'] +) + +const transaction = { + to: erc1155TokenAddress, + data +} + +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransaction(transaction) +console.log(txnResponse) + +``` + +With batching functionality, you can send multiple token transfers in a single native transaction: + +```ts +const erc1155Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data)' +]) + +// Encode two different ERC-1155 token transfers +const data1 = erc1155Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipient1Address, token1Id, amount1, '0x'] +) +const data2 = erc1155Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipient2Address, token2Id, amount2, '0x'] +) + +const transaction1 = { + to: erc1155ContractAddress, + data: data1 +} +const transaction2 = { + to: erc1155ContractAddress, + data: data2 +} + +// Send a multiple transactions as a single bundle which is executed as one transaction on chain. +const signer = wallet.getSigner() +const txnResponse = await signer.sendTransactionBatch([transaction1, transaction2]) +console.log(txnResponse) + +``` diff --git a/docs/pages/sdk/typescript/03-guides/09-send-batch-transactions.mdx b/docs/pages/sdk/typescript/03-guides/09-send-batch-transactions.mdx new file mode 100644 index 0000000000..e19379c952 --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/09-send-batch-transactions.mdx @@ -0,0 +1,55 @@ +# Sending a Batch of Transactions + +Likewise, bundling multiple transactions to be sent in a single native transaction is equally as easy: + +```ts +const transaction1 = { + to: recipient1Address, + value: 1000000000000000000 +} + +const transaction2 = { + to: recipient2Address, + value: 1000000000000000000 +} + +const signer = wallet.getSigner() +const response = await signer.sendTransaction([transaction1, transaction2]) +console.log(response) +``` + +The transactions don't have to be the same token or even token standard either. +You can mix and match: + +```ts +const erc20Interface = new ethers.utils.Interface([ + 'function transfer(address _to, uint256 _value)' +]) +const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' +]) +const erc1155Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data)' +]) + +const erc20Data = erc20Interface.encodeFunctionData( + 'transfer', [recipient2Address, amount2] +) +const erc721Data = erc721Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipient3Address, amount3] +) +const erc1155Data = erc1155Interface.encodeFunctionData( + 'safeTransferFrom', [address, recipient4Address, token4Id, amount4, '0x'] +) + +const transactions = [ + { to: recipient1Address, value: '1000000000000000000' }, + { to: daiContractAddress, data: erc20Data }, + { to: erc721ContractAddress, data: erc721Data }, + { to: erc1155ContractAddress, data: erc1155Data } +] + +const signer = wallet.getSigner() +const response = await signer.sendTransaction(transactions) +console.log(response) +``` diff --git a/docs/pages/sdk/typescript/03-guides/10-building-backends.mdx b/docs/pages/sdk/typescript/03-guides/10-building-backends.mdx new file mode 100644 index 0000000000..d12d4cab15 --- /dev/null +++ b/docs/pages/sdk/typescript/03-guides/10-building-backends.mdx @@ -0,0 +1,33 @@ +# Building Backends with Sequence + +### nodejs + +The [0xsequence](https://github.com/0xsequence/sequence.js) package which is available for browser / client use, also works perfectly on nodejs backends +written in Javascript or Typescript. + +### Go + +A complete Sequence SDK is also available in Go: https://github.com/0xsequence/go-sequence. + +[go-sequence](https://github.com/0xsequence/go-sequence) is the equivalent of [0xsequence](https://github.com/0xsequence/sequence.js) +but for Go / Golang backends. In fact, all of Sequence's infrastructure is written in Go and is built with [go-sequence](https://github.com/0xsequence/go-sequence). + + +### ethkit + +As part of the Sequence open source tools, our team has also built [ethkit](https://github.com/0xsequence/ethkit), which +is an Ethereum dev toolkit for Go backends. [ethkit](https://github.com/0xsequence/ethkit) supports EOA wallets, +and you can think of it like `ethers.js` but for Go. + + +### Support for other backend languages + +If your backend services are written in a language other than JS or Go, you can still easily integrate Sequence, +as Sequence is really just a standard Ethereum client library with some extra features. In many cases, the extra +features are best utilized on the client-side / dapp. + +If your situation for example is a Python or Java backend where you'd like to verify signatures from a Sequence Wallet, +well then, you can call the standard [EIP1271](https://eips.ethereum.org/EIPS/eip-1271) function for the account address +from your backend. + +If you'd like to use the Sequence's Meta-Transaction capabilities, see [Building Relaying Server with Sequence](/guides/templates/02-building-relaying-server). diff --git a/docs/pages/sdk/typescript/04-platforms.mdx b/docs/pages/sdk/typescript/04-platforms.mdx new file mode 100644 index 0000000000..c5ef43cd6d --- /dev/null +++ b/docs/pages/sdk/typescript/04-platforms.mdx @@ -0,0 +1,23 @@ +# Platforms + +## Web Wallet + +Sequence works beautifully on all modern Web Browsers! Try it at https://sequence.app from any computer, phone or tablet. + +See [Build With Sequence](/solutions/wallets/universal-wallet/02-quickstart.mdx) to get started. + +## Mobile Wallet + +Sequence works beautifully on your Mobile Web Browser! Try it at https://sequence.app from any phone or tablet. + +This means dapps which integrate the Sequence Wallet will automatically support users on all mobile devices, +while using standard Ethereum web3 dapp-to-wallet communication. See [Build With Sequence](/solutions/wallets/universal-wallet/02-quickstart.mdx) to get started. + +## Browser Extension Wallet + +Sequence Chrome Extension: [Install](https://chrome.google.com/webstore/detail/sequence-wallet/ocmccklecaalljlflmclidjeclpcpdim?hl=en) + +![Sequence Chrome Extension](/img/build/seq-chrome-store.png) + +![Sequence Chrome Extension](/img/build/seq-chrome-ext-uniswap.png) + diff --git a/docs/pages/sdk/typescript/05-fiat-on-ramps.mdx b/docs/pages/sdk/typescript/05-fiat-on-ramps.mdx new file mode 100644 index 0000000000..7b67c01bbf --- /dev/null +++ b/docs/pages/sdk/typescript/05-fiat-on-ramps.mdx @@ -0,0 +1,21 @@ +--- +slug: /fiat-on-ramps +--- + +# Fiat On-Ramps +Sequence Wallet allows users to purchase cryptocurrencies directly with their credit card and debit card via on-ramp providers. Currently Sequence supports 6 on-ramp providers; + +- [Moonpay](https://www.moonpay.com/) +- [Ramp](https://ramp.network/) +- [UPI via Onmeta](https://onmeta.in/) +- [Sardine](https://www.sardine.ai/) +- [PayTrie](https://paytrie.com/) +- [Wyre](https://www.sendwyre.com/) (deprecated) + +Only providers that support the region the users are in will be displayed. + +![Sequence on-demand sign in](/img/fiat-providers.png) + +As a developer integrating the Sequence Wallet, you can choose which payment provider can be visible to users. You can also specify which token will be available to purchase via the on-ramp providers. + +To learn more on how to configure the on-ramp options, see [Sequence Connect Options](/solutions/wallets/universal-wallet/03-guides/01-connect-wallet#wallet-login-and-connect-options). diff --git a/docs/pages/sdk/typescript/06-key-management.mdx b/docs/pages/sdk/typescript/06-key-management.mdx new file mode 100644 index 0000000000..945a2c6692 --- /dev/null +++ b/docs/pages/sdk/typescript/06-key-management.mdx @@ -0,0 +1,32 @@ +--- +slug: /key-management +--- + +# Key Management + +Each Sequence wallet can be controlled by multiple private keys, acting like a multisignature wallet. Users can either create a Sequence wallet using one of the supported social login options or create a wallet with a private key stored only on that device. + +The improved security compared to traditional blockchain wallet comes from the fact that multiple independent keys need to be compromised for a malicious actor to take control of a user’s wallet, instead of a single key. The philosophy is that the more independent private-keys the user adds to their wallet, the more secure their wallet becomes, even if each individual key is only moderately secure on their own. + + +## Social Login Wallets + +Sequence Wallet created with social logins are currently secured using three private keys: Session keys, a Guard key and a Torus key. The Session key and Torus key are both generated for the first time when a user creates their Sequence Wallet via social login or email authentication. +At least two of the three keys are needed to unlock an account. This means that if one of the three keys is lost or compromised, a user can use the two remaining keys to replace the lost/compromised key. For example, if a user lost their device containing their Session Key, they can unlock their Sequence Wallet account by email or social login for the Torus key combined with the Guard key. Once done, another session key is auto-generated and the user is back in their account with all 3 keys accessible again. + +### Session Keys +Session keys are stored in the browser's [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API). +Users should be prudent in safeguarding their devices from unauthorized access since an attacker with access to their IndexedDB effectively has control of their session key. + +### Guard Key +A Guard key is a key owned by Horizon. This key allows Horizon to help users that lost their Session key and can require additional information from the user in case of suspicious activity, if the user wants this additional protection. This key would be compromised if a malicious actor took control over Horizon servers hosting the Guard key. + +### Torus Key +A Torus key is a key generated by the [Torus network](https://tor.us/), and is generated using a user’s email or social login credentials such as Google or AppleID. Torus uses threshold cryptography to ensure that only the user can access their private key, making these keys non-custodial. A Torus key would be compromised if a malicious actor had control over the social account or email a user used to generate their Torus key. All Torus keys could be compromised if the Torus network itself was compromised. + + +:::info DEFAULTS + CUSTOMIZATION + +While this is the default setup for new Sequence Wallets, we intend to add the ability for users to add, remove and replace the keys controlling their wallet such that users can choose their preference in terms of security and user experience tradeoff. Even the Guard key will be able to be removed. Security tips and recommendations will be added to ensure users are well informed of the risks and how to protect themselves against them. + +::: diff --git a/docs/pages/sdk/typescript/connectors/01-overview.mdx b/docs/pages/sdk/typescript/connectors/01-overview.mdx new file mode 100644 index 0000000000..7a62574962 --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/01-overview.mdx @@ -0,0 +1,21 @@ +# Wallet Connectors + +Sequence is compatible with all standard Ethereum libraries and connectors. If you've +developed your dapp to with work Metamask, it will also automatically work with Sequence. + +Our SDKs offer all the functionality you'd need to build a web3 dapp, but you can also +combine other libraries, tools, and wallet connectors :) Please see our open sourced [Demo Dapp](https://github.com/0xsequence/demo-dapp) +project for an example use of Sequence, or see below on usage with additional connectors. + +For your dapps, you may also want to support many different kinds of wallets in addition +to the Sequence Wallet. You may do this by using sequence.js or using one of the connectors below: + +- [Sequence Kit](02-kit/01-overview.mdx) +- [Wagmi](/sdk/typescript/connectors/03-wagmi) +- [Web3Modal](/sdk/typescript/connectors/07-web3modal) +- [RainbowKit](/sdk/typescript/connectors/04-rainbow-kit) +- [web3-onboard](/sdk/typescript/connectors/05-web3-onboard) +- [web3-react](/sdk/typescript/connectors/06-web3-react-v6) + +Additionally, if you are building a mobile app or video game, please see the docs for +the respective SDK. Feel free to reach out to our team for help/questions too. diff --git a/docs/pages/sdk/typescript/connectors/02-sequence-kit.mdx b/docs/pages/sdk/typescript/connectors/02-sequence-kit.mdx new file mode 100644 index 0000000000..bc07061ac7 --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/02-sequence-kit.mdx @@ -0,0 +1,22 @@ +--- +slug: overview +title: Sequence Kit Documentation +--- + +# Sequence Kit: Seamlessly Integrate Web3 Wallets into Your Applications + +Sequence Kit 🧰 is the ultimate toolkit for effortlessly integrating web3 wallets into your applications, providing your users with a smooth and secure onboarding experience. With our robust tools built on the popular [wagmi](https://wagmi.sh/) library, unlock a realm of possibilities in the world of web3. + +## Key Features + +- **Universal Connections**: Seamlessly connect via popular social logins such as Facebook, Google, Discord, and more! Your users will enjoy a smooth, secure onboarding process. 🔐🪪 + +- **Web3 Wallet Integration**: Effortlessly integrate with leading web3 wallets like WalletConnect and MetaMask. Unleash the power of blockchain with just a few clicks! 🦊 ⛓️ + +- **Embedded Wallet Experience**: Provide your users with a comprehensive embedded wallet, enabling them to manage their coins and collectibles all within your own application. 👛 🖼️ 🪙 + +Explore the potential of Sequence Kit by trying out our [demo](https://0xsequence.github.io/kit)! + +# Next Steps + +Ready to integrate Sequence Kit into your application? Check out our [Getting Started guide](#TODO). If you're already familiar with Sequence Kit dive into the available [configuration options](#TODO) or take a look at the [checkout](#TODO). \ No newline at end of file diff --git a/docs/pages/sdk/typescript/connectors/03-wagmi.mdx b/docs/pages/sdk/typescript/connectors/03-wagmi.mdx new file mode 100644 index 0000000000..df0d5e057b --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/03-wagmi.mdx @@ -0,0 +1,96 @@ +--- +sidebar_label: Using Wagmi +--- + +# Using Wagmi + +The Sequence wallet used with Wagmi through the connector. + +:::tip Try it live :) +Try [a live Dapp example](https://0xsequence.github.io/demo-dapp-wagmi/) using Sequence + Metamask + Wallet Connect with wagmi. + +Source code is available too: [https://github.com/0xsequence/demo-dapp-wagmi](https://github.com/0xsequence/demo-dapp-wagmi) +::: + + +## Installation + +The connector is installed via the npm package `@0xsequence/wagmi-connector`. If you are using the latest version of wagmi (>= 1.0.0) the latest version of the wagmi-connector package can be installed with the following command: + +```shell +npm install @0xsequence/wagmi-connector 0xsequence ethers +``` +or +```shell +yarn add @0xsequence/wagmi-connector 0xsequence ethers +``` + +## Usage + +The connector is then imported and added to the list of connectors alongside the other wagmi connectors. + +```js +import { SequenceConnector } from '@0xsequence/wagmi-connector' + + const connectors = [ + new SequenceConnector({ + chains, + options: { + defaultNetwork: 'polygon', + connect: { + app: 'Demo-app', + } + } + }), + ...otherConnectors + ] + + const wagmiConfig = createConfig({ + autoConnect: true, + connectors, + publicClient, + webSocketPublicClient + }) +``` + +## Parameters + +### chains +Chains supported by app. This is the same parameter as would be passed to other RainbowKit wallets. + +### options.connect (optional) +Connection details that will be passed to Sequence upon connection, including app name, network id, etc... +A more in depth description of the connect options is available [here](/solutions/wallets/universal-wallet/03-guides/01-connect-wallet#wallet-login-and-connect-options). + +### options.defaultNetwork (optional) +The default network to connect to. Sequence will default all operations to this network. It can also be defined using a number (e.g. 1 for Mainnet, 5 for Goerli, etc...). + +## Using older versions of Wagmi (\<\= 0.12.x) +If you are using an older version of Wagmi (\<\= 0.12.x), which is based on ethers instead of viem, use the following command to install the appropriate version of the wagmi connector: + +```shell +npm install @0xsequence/wagmi-connector@1.0 0xsequence ethers +``` +or +```shell +yarn add @0xsequence/wagmi-connector@1.0 0xsequence ethers +``` + +## Using NextJs +There are special considerations to take into account when using Wagmi with NextJs such that it functions harmoniously with the server-side rendering of NextJs. +The correct technique to use differs depending on whether the application uses the older `pages` router or the more recent `app` router. + +See [this section](https://docs.sequence.xyz/wallet/connectors/FAQ/#how-do-i-use-a-wallet-library-and-connector-with-nextjs-using-the-app-directory-version-13-and-above-only) for an explanation on using the Wagmi connector with `app` router. +See [the example app](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/use-client-method) which uses the `app` router structure. + +See [this section](https://docs.sequence.xyz/wallet/connectors/FAQ/#how-do-i-use-a-wallet-library-and-connector-with-nextjs-using-the-pages-directory-all-versions-of-nextjs) for an explanation on using the Wagmi connector with `pages` router. +See [the example app](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/mount-hook) which uses the `pages` router structure. + +## Examples +Below are example dapps using various versions of wagmi and libraries. + +A demo app for the lastest version of Wagmi is available [here](https://github.com/0xsequence/demo-dapp-wagmi/tree/wagmi-1-0-0). +A demo app is available for older version of Wagmi(\<\=0.12.x) is available [here](https://github.com/0xsequence/demo-dapp-wagmi/tree/wagmi-0-12-x). + +A demo app for Wagmi + NextJs with the `app` router structure [here](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/use-client-method). +A demo app for Wagmi + NextJs with the older `pages` router structure [here](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/mount-hook). diff --git a/docs/pages/sdk/typescript/connectors/04-rainbow-kit.mdx b/docs/pages/sdk/typescript/connectors/04-rainbow-kit.mdx new file mode 100644 index 0000000000..478d7e7e8c --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/04-rainbow-kit.mdx @@ -0,0 +1,91 @@ +--- +sidebar_label: Using RainbowKit +--- + +# Using RainbowKit + +The Sequence wallet can be added to RainbowKit through the connector. + +:::tip Try it live :) +Try [a live Dapp example](https://0xsequence.github.io/demo-dapp-rainbowkit/) using Sequence + Metamask + Rainbow + Wallet Connect with RainbowKit. + +Source code is available too: [https://github.com/0xsequence/demo-dapp-rainbowkit](https://github.com/0xsequence/demo-dapp-rainbowkit) +::: + + +## Installation + +The connector is installed via the npm package `@0xsequence/rainbowkit-plugin`. + +```shell +npm install @0xsequence/rainbowkit-plugin 0xsequence ethers +``` +or +```shell +yarn add @0xsequence/rainbowkit-plugin 0xsequence ethers +``` + +## Usage + +The connector is then imported and added to the list of connectors alongside the other RainbowKit wallets. + +```js +import { sequenceWallet } from '@0xsequence/rainbowkit-plugin' +import { connectorsForWallets } from '@rainbow-me/rainbowkit'; + +const connectors = connectorsForWallets([ + { + groupName: 'Recommended', + wallets: [ + sequenceWallet({ + chains, + defaultNetwork: 'polygon', + connect: { + app: 'Demo-app' + } + }), + ...otherRainbowKitWallets + ] + } + +``` + +## Parameters + +### chains +Chains supported by app. This is the same parameter as would be passed to other RainbowKit wallets. + +### connect (optional) +Connect options for Sequence, including the name of the app and the default network id the wallet will attempt connection to. +A more in depth description of the connect options is available [here](/solutions/wallets/universal-wallet/03-guides/01-connect-wallet#wallet-login-and-connect-options). + +### defaultNetwork (optional) +The default network to connect to. Sequence will default all operations to this network. It can also be defined using a number (e.g. 1 for Mainnet, 5 for Goerli, etc...). + +## Using NextJs +There are special considerations to take into account when using NextJs with Wagmi-based libraries like RainbowKit, such that it functions harmoniously with the server-side rendering of NextJs. +The correct technique to use differs depending on whether the application uses the older `pages` router or the more recent `app` router. + +See [this section](/sdk/typescript/connectors/08-FAQ#how-do-i-use-a-wallet-library-and-connector-with-nextjs-using-the-app-directory-version-13-and-above-only) for an explanation on using Wagmi or Wagmi-based libraries with `app` router. +See [the example app](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/use-client-method) which uses the `app` router structure. + +See [this section](/sdk/typescript/connectors/08-FAQ#how-do-i-use-a-wallet-library-and-connector-with-nextjs-using-the-app-directory-version-13-and-above-only) for an explanation on using Wagmi or Wagmi-based libraries with `pages` router. +See [the example app](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/mount-hook) which uses the `pages` router structure. + +## Using older versions of Wagmi (\<\= 0.12.x) +If you are using an older version of Wagmi (\<\= 0.12.x), which is based on ethers instead of viem, use the following command to install the appropriate version of the wagmi connector: + +```shell +npm install @0xsequence/wagmi-connector@1.0 0xsequence ethers +``` +or +```shell +yarn add @0xsequence/wagmi-connector@1.0 0xsequence ethers +``` + +## Examples + +A demo app for RainbowKit is available [here](https://github.com/0xsequence/demo-dapp-rainbowkit) + +A demo app for NextJs + Wagmi (which is applicable for wagmi-based libraries) with the `app` router structure [here](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/use-client-method). +A demo app for NextJs + Wagmi (which is applicable for wagmi-based libraries) with the older `pages` router structure [here](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/mount-hook). diff --git a/docs/pages/sdk/typescript/connectors/05-web3-onboard.mdx b/docs/pages/sdk/typescript/connectors/05-web3-onboard.mdx new file mode 100644 index 0000000000..5dbf7d133e --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/05-web3-onboard.mdx @@ -0,0 +1,59 @@ +--- +sidebar_label: Using Web3 Onboard +--- + +# Using Web3-Onboard + +The Sequence wallet can be added through the Blocknative web3-onboard package. + +:::tip Try it live :) +Try [a live Dapp example](https://0xsequence.github.io/demo-dapp-web3-onboard/) using Sequence + Metamask + Wallet Connect with Web3-Onboard. + +Source code is available too: [https://github.com/0xsequence/demo-dapp-web3-onboard](https://github.com/0xsequence/demo-dapp-web3-onboard) +::: + +## Installation + +The Sequence module is available through npm: + +```shell +npm install @web3-onboard/sequence 0xsequence ethers +``` +or +```shell +yarn add @web3-onboard/sequence 0xsequence ethers +``` + +## Usage + +```js +import sequenceModule from '@web3-onboard/sequence' + +const sequenceOptions = { + network: 137, + appName: 'My app' +} + +const sequenceOnboard = sequenceModule({}) + +const onboard = Onboard({ + wallets: [ + sequenceOnboard, + ...restWallets + ], + ...restofOnboardParams +}) + +``` + +## Parameters + +### network (optional) +The default network that the Sequence wallet will attempt to connect to. + +### appName (optional) +The name of the app which will show up in Sequence's prompt upon an attempt to connect. + +## Example + +An example demo of an integration of Sequence + Web3 Onboard is available [here](https://github.com/0xsequence/demo-dapp-web3-onboard) diff --git a/docs/pages/sdk/typescript/connectors/06-web3-react-v6.mdx b/docs/pages/sdk/typescript/connectors/06-web3-react-v6.mdx new file mode 100644 index 0000000000..5bf6a1734a --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/06-web3-react-v6.mdx @@ -0,0 +1,59 @@ +--- +sidebar_label: Web3 React V6 +--- + +# Using Web3-React V6 + +The connector is available for web3-react V6. Please note that later versions of web3-react cannot be used with the Web3-React V6 connector due to breaking changes. + +## Installation + +The connector may be installed via the npm package: + +```js + npm install @0xsequence/web3-react-v6-connector 0xsequence ethers +``` + +## Usage + +### Initialization +The connector must be initialized similarly to other connectors. + +```js +import { SequenceConnector } from '@0xsequence/web3-react-v6-connector' + +const options = { + appName: 'Web3 React Demo app' +} + +export const sequence = new SequenceConnector({ chainId: 137, appName: options.appName }) +``` + +### Activation/Deactivation +The connection can be activated and deactivated from the initialized connector similarly to other connectors. + +```js +import { useWeb3React } from '@web3-react/core' +import { sequence as sequenceConnector } from './connectors/sequence' + +const { activate } = useWeb3React() + +const connectWeb3React = async () => { + activate(sequenceConnector); +} + +const disconnectWeb3React = async () => { + sequenceConnector.deactivate(); +} +``` + +## Options +### chainId +The default chain id as number that the Sequence wallet will attempt to connect to. + +### appName (optional) +The value of appName will be displayed by the Sequence wallet when initiating a connection. + +## Example + +A demo app for Web3-React v6 is available [here](https://github.com/0xsequence/demo-dapp-web3-react/tree/v6) diff --git a/docs/pages/sdk/typescript/connectors/07-web3modal.mdx b/docs/pages/sdk/typescript/connectors/07-web3modal.mdx new file mode 100644 index 0000000000..54b0db836f --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/07-web3modal.mdx @@ -0,0 +1,24 @@ +--- +sidebar_label: Using Web3Modal +--- + +# Using Web3Modal + +The Sequence wallet can easily be used with Web3Modal. + +:::tip Try it live :) +Try [a live Dapp example](https://0xsequence.github.io/demo-dapp-web3modal/) using Sequence + Wallet Connect with Web3Modal. + +Source code is available too: [https://github.com/0xsequence/demo-dapp-web3modal](https://github.com/0xsequence/demo-dapp-web3modal) +::: + +## Usage + +The sequence wallet is compatible with wallet connect V2 and is therefore fully compatible with web3modal by default. +Users can use the Scan button in the sequence wallet to connect. + + + + +## Example +An example demo for the sequence Wallet + web3modal is available [here] (https://github.com/0xsequence/demo-dapp-web3modal) diff --git a/docs/pages/sdk/typescript/connectors/08-FAQ.mdx b/docs/pages/sdk/typescript/connectors/08-FAQ.mdx new file mode 100644 index 0000000000..7f75006ffc --- /dev/null +++ b/docs/pages/sdk/typescript/connectors/08-FAQ.mdx @@ -0,0 +1,96 @@ +--- +sidebar_label: FAQ +--- + +Below are frequently asked questions related to the integration of the Sequence wallet connector. + +## NextJs + +### Why does my wallet integration produce an error when used with next.js? + +Wallet libraries and connectors must be rendered in the browser. This is particularly true for Wagmi and Wagmi-based libraries. Attempts to render the page elsewhere, such as on backend server, can produce errors in some situations. Rendering on the server is therefore highly discouraged. + +The method for fixing this issue will depend on the folder structure. The `pages` folder structure is available for all versions of NextJs, while the `app` folder structure is only available for NextJs version 13 and above and may require being turned on through an experimental setting. + +See using wallet libraries with [next.js pages directory](/sdk/typescript/connectors/08-FAQ#how-do-i-use-a-wallet-library-and-connector-with-nextjs-using-the-pages-directory-all-versions-of-nextjs) + +See using wallet libraries with [next.js app directory(NextJs 13+ feature)](/sdk/typescript/connectors/08-FAQ#how-do-i-use-a-wallet-library-and-connector-with-nextjs-using-the-app-directory-version-13-and-above-only) + + +### How do I use a wallet library and connector with next.js using the `pages` directory (all versions of NextJs)? +The content of the application which depends on Wagmi hooks must be mounted only once the application is rendered in the client. This is a limitation due to wagmi when used with NextJs, and all wagmi-based libraries will inherit this limitation. To do so we can use a `useEffect` hook to wait before rendering the application. + +In the example below, we wait until the app is mounted in the client before rendering the rest of the application: +```js +import { useIsMounted } from '../hooks' +import Home from '../components/Home' + +const Page = () => { + const isMounted = useIsMounted() + + if (!isMounted) return null + return ( + <> + + + ) +} + +export default Page +``` + +A full code example of this setup working with the Wagmi library can be found [on github](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/mount-hook). +The method described above is the one recommended by Wagmi and is demonstrated in their [official example](https://github.com/wagmi-dev/wagmi/blob/0.12.x/examples/_dev/src/pages/index.tsx). + +### How do I use a wallet library and connector with next.js using the `app` directory (version 13 and above only)? +NextJs 13 and above allows using a new folder structure in which the content is placed in an `app` directory. Enabling this feature may require explicitly indicating it with an experimental setting. +When using such a folder structure, NextJs allows the declaration of Client Components which are components that will be rendered in the browser. +A wrapper component containing the wallet library initialized with all the connectors must be declared with the `"use client"` directive. The `"use client"` directive is what will turn the wrapper component into a Client Component to be rendered in the browser. + +In addition, there is a bug with wagmi and nextJs when using the autoConnect feature which causes + +In the example below, we declare a wrapper component with the `"use client"` directive: + +```js +"use client" // this directive informs next.js that the component is a Client Component to be rendered in the browser + +const WagmiWrapper = ({ children }) => { + const wagmiClient = createClient({ + autoConnect: true, + connectors, + provider, + webSocketProvider, + }); + + + return ( + + {children} + + ); +} + +export default WagmiWrapper +``` + +This wrapper component can then be imported normally and wrap the rest of the application. The child components can be a combination of Client and Server components. + +```js +// We import a custom wrapper component that initializes the wallet library and all its connectors +// An example of the content of this wrapper component can be found here: https://github.com/0xsequence/demo-dapp-wagmi-next/blob/master/components/WagmiProvider.tsx +import WagmiWrapper from './WagmiWrapper' + +// We can then wrap our entire app with this browser's rendered component +function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} +``` + +A full code example using Nextjs and the `app` directory can be found [on github](https://github.com/0xsequence/demo-dapp-wagmi-next/tree/use-client-method). +The method described above is the one recommended by Wagmi through their NextJs example which can be consulted by running the command `npx create-wagmi` and selecting the nextJs option. + +Click [here](https://beta.nextjs.org/docs/rendering/server-and-client-components#client-components) for more information about Client Components. \ No newline at end of file diff --git a/docs/pages/sdk/unity/01-overview.mdx b/docs/pages/sdk/unity/01-overview.mdx new file mode 100644 index 0000000000..20fa92759a --- /dev/null +++ b/docs/pages/sdk/unity/01-overview.mdx @@ -0,0 +1,14 @@ + +# Introduction + +The Sequence Unity Embedded Wallet SDK provides full Sequence [Embedded Wallet](/solutions/wallets/embedded-wallet/01-overview) and [Indexer](/api/indexer) integration for your Unity Games, integrated with our own purpose-built for Unity SequenceEthereum library. That's right, no Nethereum required! + +This SDK follows [Semantic Versioning](https://semver.org/) (`major.minor.patch`). While we're still in `0.x.y` builds, API breaking changes can be made at any time. After `1.0.0`, breaking changes will always cause a `major` version increment, non-breaking new features will cause a `minor` version increment, and bugfixes will cause a `patch` version increment. + +## Requirements +Unity 2021.3.6f1 or later +- Android +- iOS +- PC standalone +- Mac standalone -> (Mono builds only when using Social Sign in -> in our testing MacOS doesn't pick up custom URL schemes automatically unless you run some system commands first; these system commands only work on Mono -> see [OpenIdAuthentication.PlatformSpecificSetup](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Authentication/OpenIdAuthenticator.cs#L89)) +- WebGL (excluding Social Sign in) diff --git a/docs/pages/sdk/unity/02-installation.mdx b/docs/pages/sdk/unity/02-installation.mdx new file mode 100644 index 0000000000..d951b31ec7 --- /dev/null +++ b/docs/pages/sdk/unity/02-installation.mdx @@ -0,0 +1,50 @@ +# Installation + +## Package Manager - Recommended + +1. Ensure you have Git 2.14.0 or above installed on your machine +2. Open Package Manager (Window > Package Manager) +3. Click the "+" icon in the Package Manager window > "Add package from git URL..." +4. Paste this url and click Add or press Enter on your keyboard `https://github.com/0xsequence/sequence-unity.git?path=/Assets` +5. From Package Manager, click on "Samples" +6. Import "Setup" from Samples +![Setup](/img/unity/unity-import-setup.png) + +a) This will import a Resources folder with the SequenceConfig scriptable object (more on this in Setup). + +b) This will also import an Editor folder with a Post Process Build script that will setup social sign in for you automatically on MacOS and iOS. + +7. Import `TMP Essentials` (if you haven't already). Note: Unity should prompt you to do this automatically if you attempt to Play or Build with a TextMeshPro object in your scene. + +![Import TMPro](/img/unity/unity-import-tmpro.png) + +### Samples + +In addition to this documentation, we've also provided you with a few samples to help with using our SDK. + +These can be found by: +1. Opening Package Manager +2. Finding our SDK "Sequence WaaS SDK" +3. Click on "Samples" +4. Click "Import" next to any sample you wish to install. This will create a Samples folder under Assets and import the sample there. The sample will be completely mutable as it lives within your Assets folder. + +![Samples](/img/unity/unity-package-manager-samples.png) + +The second sample "Demo Scene" is sample scene that showcases some of the features of our SDK. It serves as a useful supplement to the documentation. + +The third sample "Demo Tower Defense Game" is a sample game. We began with [Unity's Tower Defense Template](https://assetstore.unity.com/packages/essentials/tutorial-projects/tower-defense-template-107692) project and ripped out the save system to replace it with ERC1155s. When importing this sample game into your project, you may get a message "Script Updating Consent" that asks if you want to update the source files to the a newer API. This is because the template project was made on a much earlier version of Unity and some of the scripting APIs used by Unity have changed since the template project was created. You can simply click "Yes, just for these files". Note that, in order to play the demo game, there is some [config you need to setup](https://github.com/0xsequence/sequence-unity-demo/tree/tower-defence/package-manager?tab=readme-ov-file#how-it-was-made). However, even without configuring the game, we believe the Scripts within the project can be a useful resource when starting out. + +![Update API Prompt](/img/unity/unity-update-api-prompt.png) + +## Manual + +Installing via Package Manager will put the SDK in a read-only state - note: you will still be able to modify the UI when using Package Manager. + +For most use cases, this is ideal. However, we recognize that some advanced users will want the flexibility to edit the SDK as they see fit. + +Please note that if you do chose this route that updating the SDK will become more challenging because any changes you make will be overwritten and these changes can easily go unnoticed in a version control system. In general, we feel it is safer to import the SDK in read-only mode via Package Manager and write wrappers to extend as needed, but we empower you to work with our SDK how you see fit. + +1. Add [Newtonsoft.json](https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.0/manual/index.html) to your project (if it isn't there already) via package manager. Click on the "+" icon in the Package Manager window > "Add package by name..." and add `com.unity.nuget.newtonsoft-json`. +2. Download [the latest release of the Sequence Unity SDK UnityPackage](https://github.com/0xsequence/sequence-unity/releases) +3. Drag the `.unitypackage` file into your project window and import it +4. Import `TMP Essentials` (if you haven't already). Note: Unity should prompt you to do this automatically if you attempt to Play or Build with a TextMeshPro object in your scene. \ No newline at end of file diff --git a/docs/pages/sdk/unity/03-setup.mdx b/docs/pages/sdk/unity/03-setup.mdx new file mode 100644 index 0000000000..9a6f83883e --- /dev/null +++ b/docs/pages/sdk/unity/03-setup.mdx @@ -0,0 +1,16 @@ +# Setup + +1. Navigate to the Resources folder imported via the `Setup` sample and locate the `SequenceConfig` ScriptableObject + + a) If you imported the SDK manually, you will need to create a Resources folder and SequenceConfig + + b) Create a `Resources` folder located at `Assets/Resources`. The SDK uses [Resources.Load](https://docs.unity3d.com/ScriptReference/Resources.Load.html) to load the config `ScriptableObject` we'll create in the next step. + + c) On the top bar, click `Assets > Create > Sequence > SequenceConfig` and place the newly created `ScriptableObject` at the root of your `Resources` folder. +2. Fill in `SequenceConfig` with the appropriate values for your project. + + a) `Url Scheme` - You must replace this with a string that is unique to your application. This is very important. Failure to do so will cause unexpected behaviour when signing in with social sign in and it will not work. + + b) `Builder API Keys` - These are found in the [Builder](https://sequence.build/) under `Settings > API Access Keys` + + c) `WaaS Config Key` - This will be given to you by the Sequence team during WaaS onboarding \ No newline at end of file diff --git a/docs/pages/sdk/unity/04-authentication.mdx b/docs/pages/sdk/unity/04-authentication.mdx new file mode 100644 index 0000000000..b3cefdde82 --- /dev/null +++ b/docs/pages/sdk/unity/04-authentication.mdx @@ -0,0 +1,125 @@ +# Authentication +As a WaaS SDK, authentication is extremely important. Authentication works by establishing a session signing wallet through association with an [OIDC idToken](https://auth0.com/docs/secure/tokens/id-tokens/id-token-structure#sample-id-token). For more on how our Embedded Wallet works, please [see Embedded Wallet docs](/solutions/wallets/embedded-wallet/01-overview). + +To implement authentication, we recommend using our `LoginPanel` prefab. Locate this prefab under `SequenceExamples > Prefabs` and drag it under a [Canvas](https://docs.unity3d.com/2020.1/Documentation/Manual/UICanvas.html) in your scene. +We recommend having the `Canvas Scaler` component attached to your `Canvas` use the "Scale with Screen Size" UI Scale Mode. This will make it so that the LoginPanel (and any other UI elements under this Canvas) are scaled automatically when switching between build targets. + +Note: The `LoginPanel` is hidden by default. You can open it with the `Open` method and no arguments. To help with this, the `LoginPanel` GameObject is not disabled, so feel free to use [GetComponentInChildren](https://docs.unity3d.com/ScriptReference/Component.GetComponentInChildren.html), [FindObjectOfType](https://docs.unity3d.com/ScriptReference/Object.FindObjectOfType.html), or similar to obtain a reference to the `LoginPanel` MonoBehaviour. + +This will provide you easy access to two authentication methods: + +## 1. Email Sign In +Available on all platforms, email sign in leverages [Amazon Cognito](https://aws.amazon.com/cognito/) and provides the user with a 2FA challenge - a 6 digit code emailed to the entered address for the user to enter on the next page. +Once the user successfully completes the 2FA challenge, the SDK will receive an idToken in JWT format from Amazon Cognito and proceed to establish the session with WaaS API. + +## 2. Social Sign in +Available on all platforms except WebGL (currently), social sign in uses [OIDC](https://openid.net/developers/how-connect-works/) with the [implicit flow](https://auth0.com/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-implicit-flow) to allow users to login via their existing Google, Discord, Facebook, or Apple accounts. +Once the user successfully signs in, an idToken is returned via deep link to the application. +In order to enable deep linking, we must register a custom URL scheme for our application. There are some platform specific requirements to set this up. + +Note: social sign in does not work in the Editor as we cannot register a custom URL scheme. + +### iOS + +1. Open the iOS Player Settings window (menu: Edit > Project Settings > Player Settings, then select iOS). +2. Select `Other Settings`, then scroll down to `Configuration`. +3. Expand the `Supported URL schemes` section, and add 1 to the size. +4. In the new `Element N` field, enter the URL scheme you've configured in `SequenceConfig`. + +![iOS URL Scheme](/img/unity/unity-url-scheme-ios.png) + +### MacOS + +1. Open the Windows/Mac/Linux Player Settings window (menu: Edit > Project Settings > Player Settings, then select Windows/Mac/Linux). +2. Select `Other Settings`, then scroll down to `Mac Configuration`. +3. Expand the `Supported URL schemes` section, and add 1 to the size. +4. In the new `Element N` field, enter the URL scheme you've configured in `SequenceConfig`. + +![Mac URL Scheme](/img/unity/unity-url-scheme-mac.png) + +### PC + +No additional steps required. + +### Android + +1. In the Project window, browse to `Assets > Plugins > Android`. + + a) Note: in Unity versions 2021.2 and up this path doesn't exist by default. Please navigate to `Edit > Project Settings > Player` and under the Android Publishing Settings, enable `Custom Main Manifest` in the Build section. See https://docs.unity3d.com/Manual/deep-linking-android.html for more info. + +2. If it doesn't already exist, create a new file and name it `AndroidManifest.xml`. +3. Paste the following XML into the file, or, if you already have one, add the new keys from this XML to it. +4. Make sure to replace 'sdk-powered-by-sequence' with the Url Scheme you set in `SequenceConfig` + +```xml + + + + + + + + + + + + + + + + + +``` + b) Note: Unity 2022 versions prior to `2022.3.7f1` and 2023 versions prior to `2023.1.7f1`, `2023.2.0b3`, or `2023.3.0a1` contain a bug with Android deep-linking. Please use this XML instead. + ```xml + + + + + + + + + + + + + + + + + + + ``` + i.e. add `` after your first `intent-filter`. Please see https://forum.unity.com/threads/deep-linking-in-unity-2022-the-app-is-restarted.1447300/ for more info. + + ### WebGL + + Coming soon. + + ## Connecting with WaaS + + Once we've received the `idToken` from either email login or social sign in, the SDK will handle connecting with WaaS servers for you. If you're curious how this is done, please see [`ConnectToWaaS` in `WaaSLogin.cs`](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/WaaS/WaaSLogin.cs#L88). + You'll want to subscribe to the `WaaSWallet.OnWaaSWalletCreated` event. This can be done with the following code snippet: + ``` + WaaSWallet.OnWaaSWalletCreated += OnWaaSWalletCreatedHandler; + + public void OnWaaSWalletCreatedHandler(WaaSWallet wallet) { + // Do something + } + ``` + where `OnWaaSWalletCreatedHandler` is a function accepting a `WaaSWallet` as it's only parameter. If you're unfamiliar with working with events in Unity, check out this great [Reddit post](https://www.reddit.com/r/gamedev/comments/u3hz2v/how_to_use_events_a_supersimple_unity_example/)! + + Congratulations! You've just connected your user with WaaS, creating them a new account and non-custodial smart contract wallet as needed. \ No newline at end of file diff --git a/docs/pages/sdk/unity/05-write-to-blockchain.mdx b/docs/pages/sdk/unity/05-write-to-blockchain.mdx new file mode 100644 index 0000000000..6ef280a88f --- /dev/null +++ b/docs/pages/sdk/unity/05-write-to-blockchain.mdx @@ -0,0 +1,223 @@ +# Write to Blockchain + +The blockchain can be thought of as a general-purpose, publically viewable and verified, database. To write to a blockchain, similar to with a typical database, you must make a transaction. + +Typically, creating a blockchain transaction is rather complex, but WaaS handles that complexity for you and exposes 5 types of `Transactions`. + +Sending a transaction is an [asynchronous Task](https://medium.com/@sonusprocks/async-await-in-c-unity-explained-in-easy-words-571ebb6a9369). You can use `await` when calling `WaaSWallet.SendTransaction` from within an async Task if you wish to obtain the `TransactionReturn` object directly. Or, you can take the recommended approach which is to setup handler functions for the `WaaSWallet.OnSendTransactionComplete` and `WaaSWallet.OnSendTransactionFailed` events and call the `WaaSWallet.SendTransaction` method from anywhere (without await). For example: +``` +public void OnSendTransactionCompleteHandler(SuccessfulTransactionReturn result) { + // Do something +} + +public void OnSendTransactionFailedHandler(FailedTransactionReturn result) { + // Do something +} + +public void OnWaaSWalletCreatedHander(WaaSWallet wallet) { + wallet.OnSendTransactionComplete += OnSendTransactionCompleteHandler; + wallet.OnSendTransactionFailed += OnSendTransactionFailedHandler; +} +``` +If you're unfamiliar with working with events in Unity, check out this great [Reddit post](https://www.reddit.com/r/gamedev/comments/u3hz2v/how_to_use_events_a_supersimple_unity_example/)! + +## RawTransaction +The most basic form of a `Transaction`, a raw transaction is very useful to send ETH or the gas currency of the network you are interacting with to an `Address`. + +For example, to send one MATIC to `0x9766bf76b2E3e7BCB8c61410A3fC873f1e89b43f` you can use this snippet: +``` +_wallet.SendTransaction( + Chain.Polygon, + new SequenceSDK.WaaS.Transaction[] + { + new RawTransaction("0x9766bf76b2E3e7BCB8c61410A3fC873f1e89b43f", DecimalNormalizer.Normalize(1)) + }); +``` +where _wallet is a WaaSWallet. + +Note: the [EVM](https://ethereum.org/en/developers/docs/evm/) does not support floating point numbers. As a result, token (and gas currency) values are represented by whole numbers and a "decimals" value. 1 ETH (or in the example above 1 MATIC) is represented as `1000000000000000000` (1 * 10^18) as ETH, MATIC, and most gas currencies have a "decimals" value of 18. `DecimalNormalizer.Normalize` (above) is a basic helper function that will return `input value * 10^decimals` and optionally accepts a "decimals" value as a second parameter (defaulting to 18 when not provided). + +Additionally, you can include data with a raw transaction in hexadecimal format as a string. For more on this, please see the advanced section of this documentation. + +## sendERC20 +An [ERC20](https://docs.openzeppelin.com/contracts/4.x/erc20) token is the fungible token standard. You can easily deploy an ERC20 contract and mint tokens using our [Builder](https://sequence.build/). Learn how in our [Builder documentation](https://docs.sequence.xyz/builder/overview). + +To send an ERC20 token transaction, you can use this code snippet: +``` +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new SendERC20( + erc20TokenAddress, + ToAddress, + AmountAsString), + }); +``` + +Note: as above, it is recommended to use `DecimalNormalizer.Normalize` to convert the amount from human readable format to EVM format. Please make sure to include the optional "decimals" int parameter if your ERC20 token has a "decimals" value that is not 18. If you're not sure how many "decimals" your ERC20 has, this can be easily read on the Builder using the "decimals" method under "Read Contract". + +### Complex ERC20 Interactions +For interactions with ERC20 tokens outside of basic transfers, you'll want to use our `SequenceEthereum` library provided with the SDK. We've created ERC20 smart contract wrapper functions for your convenience that allow you to create and send `RawTransactions` with WaaS. + +First, you'll need to create an `ERC20` object by providing a contract address and optionally, an [ABI](https://docs.soliditylang.org/en/latest/abi-spec.html#json) string, if you are using a custom variation of the ERC20 standard (not recommended). + +``` +ERC20 myToken = new ERC20(myTokenAddress); +``` + +with this reference, you'll have access to all of the methods implemented by the ERC20 class. Any method that returns a `CallContractFunction`, e.g. `Mint`, can be used when creating a RawTransaction with WaaS. For example: + +``` +ERC20 myToken = new ERC20(myTokenAddress); +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new RawTransaction(myToken.Mint(toAddress, DecimalNormalizer.NormalizeAsBigInteger(amount))), + }); +``` + +## sendERC721 +An [ERC721](https://docs.openzeppelin.com/contracts/4.x/erc721) token is the non-fungible standard, you've probably heard of them as NFTs. You can easily deploy an ERC721 contract and mint tokens using our [Builder](https://sequence.build/). Learn how in our [Builder documentation](https://docs.sequence.xyz/builder/overview). + +To send an ERC721 token transaction, you can use this code snippet: +``` +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new SendERC721( + erc721TokenAddress, + ToAddress, + TokenIdAsString), + }); +``` + +### Complex ERC721 Interactions +For interactions with ERC721 tokens outside of basic transfers, you'll want to use our `SequenceEthereum` library provided with the SDK. We've created ERC21 smart contract wrapper functions for your convenience that allow you to create and send `RawTransactions` with WaaS. + +First, you'll need to create an `ERC721` object by providing a contract address and optionally, an [ABI](https://docs.soliditylang.org/en/latest/abi-spec.html#json) string, if you are using a custom variation of the ERC721 standard (not recommended). + +``` +ERC721 myToken = new ERC721(myTokenAddress); +``` + +with this reference, you'll have access to all of the methods implemented by the ERC721 class. Any method that returns a `CallContractFunction`, e.g. `SafeMint`, can be used when creating a RawTransaction with WaaS. For example: + +``` +ERC721 myToken = new ERC721(myTokenAddress); +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new RawTransaction(myToken.SafeMint(toAddress)), + }); +``` + +## sendERC1155 +An [ERC1155](https://docs.openzeppelin.com/contracts/4.x/api/token/erc1155) token is the multi token standard, often referred to as SFTs (semi-fungible tokens). As [co-creators of the ERC1155 standard](https://eips.ethereum.org/EIPS/eip-1155) we are firm believers in its unparalleled usefulness for games. You can easily deploy an ERC1155 contract and mint tokens using our [Builder](https://sequence.build/). Learn how in our [Builder documentation](https://docs.sequence.xyz/builder/overview). + +To send an ERC1155 token transaction, you can use this code snippet: +``` +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new SendERC1155( + erc1155TokenAddress, + ToAddress, + new SendERC1155Values[] + { + new SendERC1155Values(TokenIdAsString, AmountAsString), + ... + }), + }); +``` + +Note: you can send multiple token ids from the same ERC1155 contract in a single transaction by including multiple `SendERC1155Values` objects in the transaction + +### Complex ERC1155 Interactions +For interactions with ERC1155 tokens outside of basic transfers, you'll want to use our `SequenceEthereum` library provided with the SDK. We've created ERC1155 smart contract wrapper functions for your convenience that allow you to create and send `RawTransactions` with WaaS. + +First, you'll need to create an `ERC1155` object by providing a contract address and optionally, an [ABI](https://docs.soliditylang.org/en/latest/abi-spec.html#json) string, if you are using a custom variation of the ERC1155 standard (not recommended). + +``` +ERC1155 myToken = new ERC1155(myTokenAddress); +``` + +with this reference, you'll have access to all of the methods implemented by the ERC1155 class. Any method that returns a `CallContractFunction`, e.g. `Mint`, can be used when creating a RawTransaction with WaaS. For example: + +``` +ERC1155 myToken = new ERC1155(myTokenAddress); +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new RawTransaction(myToken.Mint(toAddress, tokenId, amount)), + }); +``` + +## DelayedEncode +When calling a smart contract on an EVM-based network, the client goes through a complex process known as "ABI encoding" where the function signature you want to call as well as the parameters you're providing are encoded into a binary format. This process is complicated and error-prone so we've abstracted it all away so that you don't have to deal with it. But, if you're curious to learn how it works, please see [this document](https://docs.soliditylang.org/en/develop/abi-spec.html). + +A DelayedEncode transaction allows you to call any method on an arbitrary smart contract, allowing us to handle the complicated ABI encoding process. + +To send a DelayedEncode transaction, you can use this code snippet: +``` +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new DelayedEncode(ContractAddress, ValueAsString, new DelayedEncodeData( + ContractABIAsString, + ParametersAsObjectArray, + FunctionNameAsString)), + }); +``` +Let's examine the above to get a better understanding of some of the variables that may be non-obvious. + +ValueAsString: This will usually be "0" unless you are calling a [payable method](https://solidity-by-example.org/payable/) denoted by the `payable` keyword in the smart contract definition. If you are calling a payable method, it is recommended to use `DecimalNormalizer.Normalize` to convert the amount from human readable format to EVM format. + +ContractABIAsString: This can either be the entire [ABI](https://docs.soliditylang.org/en/latest/abi-spec.html#json) or just the function you plan on interacting with. If you're not familiar with ABIs, we'd recommend copy-pasting the function signature (with parameters) from the contract source code on Etherscan (or the appropriate block explorer for your network) and removing the whitespace and variable names. + +ParametersAsObjectArray: The parameters you want to provide to the method you wish to call. No need to provide the parameter names, just their values in the order they appear in the ABI. Provide parameters in string format when in doubt. + +FunctionNameAsString: The name of the function you want to call as it appears in the ABI (or source code). Exclude parentheses and parameters. + +Putting this together, an example of using delayed encode to call the "mint" function on an ERC20 would look like this: +``` +_wallet.SendTransaction(Chain.Polygon, new SequenceSDK.WaaS.Transaction[] + { + new DelayedEncode(ContractAddress, "0", new DelayedEncodeData( + "mint(address,uint256)", + new object[] + { + ToAddress, DecimalNormalizer.Normalize(1) + }, + "mint")), + }); +``` + +## Batch Transactions +Using the magic of the Sequence Smart Contract wallet, our SDK allows you to seemlessly batch transactions together. Batching transactions together is extremely beneficial as it provides material gas savings and allows you to create complex transactions, that either all pass or all fail, without deploying custom smart contracts for each bespoke use case, opening a whole new realm of design possibilities! + +Sending a batch transaction is easy! Simply include multiple transactions, of any type, in your transaction array when making the `SendTransaction` request. + +For example - sending a transaction of each type in a batch: +``` +_wallet.SendTransaction( + Chain.Polygon, + new SequenceSDK.WaaS.Transaction[] + { + new RawTransaction(ToAddress, DecimalNormalizer.Normalize(1)), + new SendERC20( + erc20TokenAddress, + ToAddress, + AmountAsString), + new RawTransaction(new ERC20(erc20TokenAddress).Burn(DecimalNormalizer.NormalizeAsBigInteger(amount))), + new SendERC721( + erc721TokenAddress, + ToAddress, + TokenIdAsString), + new SendERC1155( + erc1155TokenAddress, + ToAddress, + new SendERC1155Values[] + { + new SendERC1155Values(TokenIdAsString, AmountAsString), + ... + }), + new DelayedEncode(ContractAddress, ValueAsString, new DelayedEncodeData( + ContractABIAsString, + ParametersAsObjectArray, + FunctionNameAsString)), + }); +``` +Since these transactions are all batched into a single transaction by the Sequence Smart Contract Wallet before being submitted to the network, you will receive only one transaction receipt. \ No newline at end of file diff --git a/docs/pages/sdk/unity/06-read-from-blockchain.mdx b/docs/pages/sdk/unity/06-read-from-blockchain.mdx new file mode 100644 index 0000000000..6b10bde640 --- /dev/null +++ b/docs/pages/sdk/unity/06-read-from-blockchain.mdx @@ -0,0 +1,13 @@ +#TODO Add code tabs + +# Read from Blockchain + +Reading from the blockchain is done using Unity-Native implementation of our [Sequence Indexer](/api/indexer). + +We recommend creating an instance of the [`ChainIndexer` class](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Indexer/ChainIndexer.cs). This will expose you to all the functionality offered by the [`IIndexer` interface](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Indexer/IIndexer.cs). + +``` +IIndexer polygonIndexer = new ChainIndexer(Chain.Polygon); +``` + +`ChainIndexer` is essentially a wrapper of the [`Indexer` static class](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Indexer/Indexer.cs) which is fully documented here: https://docs.sequence.xyz/unity-sdk/indexer/guides. \ No newline at end of file diff --git a/docs/pages/sdk/unity/07-sign-messages.mdx b/docs/pages/sdk/unity/07-sign-messages.mdx new file mode 100644 index 0000000000..d5fcc4edd0 --- /dev/null +++ b/docs/pages/sdk/unity/07-sign-messages.mdx @@ -0,0 +1,18 @@ +# Sign Messages + +Signing a message is an [asynchronous Task](https://medium.com/@sonusprocks/async-await-in-c-unity-explained-in-easy-words-571ebb6a9369). You can use `await` when calling `WaaSWallet.SignMessage` from within an async Task if you wish to obtain the `SignMessageReturn` object directly. Or, you can take the recommended approach which is to setup a handler function for the `WaaSWallet.OnSignMessageComplete` event and call the `WaaSWallet.SignMessage` method from anywhere (without await). For example: +``` +public void OnSignMessageCompleteHandler(string signature) { + // Do something +} + +public void OnWaaSWalletCreatedHander(WaaSWallet wallet) { + wallet.OnSignMessageComplete += OnSignMessageCompleteHandler; +} +``` + +``` +_wallet.SignMessage(Chain.Polygon, "Message to sign"); +``` + +If you're unfamiliar with working with events in Unity, check out this great [Reddit post](https://www.reddit.com/r/gamedev/comments/u3hz2v/how_to_use_events_a_supersimple_unity_example/)! \ No newline at end of file diff --git a/docs/pages/sdk/unity/08-deploy-contracts.mdx b/docs/pages/sdk/unity/08-deploy-contracts.mdx new file mode 100644 index 0000000000..d1a6223e2e --- /dev/null +++ b/docs/pages/sdk/unity/08-deploy-contracts.mdx @@ -0,0 +1,32 @@ +# Contract Deployment +While, in general, we would recommend deploying your smart contracts via the [Builder](https://sequence.build/), we recognize that there are some use cases where deploying a smart contract from Unity (or a Made-With-Unity application) is useful. + +Contract deployment involves sending a transaction, which is done via an [asynchronous Task](https://medium.com/@sonusprocks/async-await-in-c-unity-explained-in-easy-words-571ebb6a9369). You can use `await` when calling `WaaSWallet.DeployContract` from within an async Task if you wish to obtain the `ContractDeploymentReturn` object directly. Or, you can take the recommended approach which is to setup handler functions for the `WaaSWallet.OnDeployContractComplete` and `WaaSWallet.OnDeployContractFailed` events and call the `WaaSWallet.DeployContract` method from anywhere (without await). + +`WaaSWallet.DeployContract` is essentially a wrapper for a very special `WaaSWallet.SendTransaction` call and therefore, you can expect to still receive the `WaaSWallet.OnSendTransactionComplete` or `WaaSWallet.OnSendTransactionFailed` events in addition. + +``` +public void OnDeployContractCompleteHandler(SuccessfulContractDeploymentReturn result) { + Address newlyDeployedContractAddress = result.DeployedContractAddress; + + // Do something +} + +public void OnDeployContractFailedHandler(FailedContractDeploymentReturn result) { + // Do something +} + +public void OnWaaSWalletCreatedHander(WaaSWallet wallet) { + wallet.OnDeployContractComplete += OnDeployContractCompleteHandler; + wallet.OnDeployContractFailed += OnDeployContractFailedHandler; +} +``` +If you're unfamiliar with working with events in Unity, check out this great [Reddit post](https://www.reddit.com/r/gamedev/comments/u3hz2v/how_to_use_events_a_supersimple_unity_example/)! + +To deploy a contract you'll need to first [compile your smart contract code into bytecode](https://medium.com/coinmonks/compiling-the-smart-contracts-8dcda8071638) and add the bytecode as a hexadecimal string in one of your C# scripts. + +To deploy a smart contract, you can use this code snippet: +``` +string bytecode = "Here you'll paste your compiled bytecode" +_wallet.DeployContract(Chain.Polygon, bytecode); +``` \ No newline at end of file diff --git a/docs/pages/sdk/unity/09-wallet-ui.mdx b/docs/pages/sdk/unity/09-wallet-ui.mdx new file mode 100644 index 0000000000..ac3f44b610 --- /dev/null +++ b/docs/pages/sdk/unity/09-wallet-ui.mdx @@ -0,0 +1,49 @@ +# Wallet UI + +As a Wallet as a Service product, this SDK requires no UI. However, as we expect some apps will still choose to provide some form of wallet UI to users, we are making efforts to provide a default UI for you to use. + +This UI can be found under `SequenceExamples`. + +To add the UI to your scene, you can add the `WalletPanel` prefab found under `SequenceExamples > Prefabs`. It is opened using the Open method; you must provide an [`IWallet`](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/WaaS/IWallet.cs) (e.g. a `WaaSWallet`) as an argument. + +You'll notice that the UI is still a work in progress and is also using mocks in some places (fetching transaction history and prices). These will be replaced in coming updates of the SDK, but please feel free to replace them on your own (and for bonus points, submit a PR!). + +## How It Works +The sample Sequence UI is comprised of a few important components. + +### [UIPage](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceExamples/Scripts/UI/UIPage.cs) +A `UIPage` is the base implementation of a "page" in the sample UI. Example pages: `LoginPage`, `TokenInfoPage` + +It is responsible for opening/closing the page and managing the chosen `ITween`. + +### [ITween](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceExamples/Scripts/Tweening/ITween.cs) +An `ITween` is an interface for an animation (in/out) that can be applied to a `RectTransform` (a required component of a `UIPage`). If you don't like the animations for a given `UIPage` or `UIPanel` you can easily swap it for any other MonoBehaviour implementing the `ITween` interface, even your own! + +Tip: to save time creating your own animations, consider using the popular [DOTween toolset](https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676) + +### [UIPanel](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceExamples/Scripts/UI/UIPanel.cs) +Inherriting from `UIPage`, a `UIPanel` is the base implementation of a "panel" in the sample UI. Example panels: `LoginPanel`, `WalletPanel` + +In addition to `UIPage` responsibilities, UIPanels maintain a stack of UIPages and `object[]` (open arguments) and are responsible for managing any required event listeners and UI transitions between their child pages (according to Scene inspector heirarchy), including handling the "Back" button. + +### [SequenceSampleUI](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceExamples/Scripts/UI/SequenceSampleUI.cs) +`SequenceSampleUI` can be thought of as the "manager" of the sample UI. It holds a reference to all the UIPanels and is responsible for opening them as needed, including at `Start()`. If you are integrating all or part of the provided sample UI into your project, you may find it more practical to replace `SequenceSampleUI` with your own UI "manager", using `SequenceSampleUI` as a reference. + +## UI Customizability +Built on Unity's UI system, the UI is entirely customizable. We encourage you to make it your own and "beautify" it to suit your app! + +### Color Scheme Manager +To help you with the process, we've added a basic [`ColorSchemeManager` script](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceExamples/Scripts/UI/ColorSchemeManager.cs) which you can experiment with in our Demo scene, which can be [imported via Package Manager](https://docs.sequence.xyz/unity-waas-sdk/installation#samples). + +To use the `ColorSchemeManager`, please perform the following in edit mode. + +1. Create a `Color Scheme` [scriptable object](https://docs.unity3d.com/Manual/class-ScriptableObject.html) by navigating to the top bar `Assets > Create > Sequence > Color Scheme` and give it an appropriate name. +2. Set the desired colors in your new scriptable object - don't forget to set the alpha values! Unity defaults these to 0. +3. Locate the `ColorSchemeManager` MonoBehaviour in your scene in the inspector. In our demo scene, this is attached to the `SequenceCanvas` gameObject. +4. Set your newly created scriptable object as the Color Scheme. +5. Click "Apply". Note that this may take a few seconds to apply and you may need to click apply multiple times due to the way Unity refreshes after changes in the inspector (version dependant). + +The `ColorSchemeManager` isn't meant to give you perfect results and the perfect UI right out of the gate, but we hope it saves you some time on the way there! + +### More Customization Tools Coming Soon +We hope to bring you more convenience tools to help you customize the UI quicker and easier! While we have ideas of our own, nobody understands your needs better than you do, so please don't hesitate to reach out to us with any ideas you have! Or better yet, submit a PR! \ No newline at end of file diff --git a/docs/pages/sdk/unity/Advanced/01-introduction.mdx b/docs/pages/sdk/unity/Advanced/01-introduction.mdx new file mode 100644 index 0000000000..600c35ba72 --- /dev/null +++ b/docs/pages/sdk/unity/Advanced/01-introduction.mdx @@ -0,0 +1,30 @@ +# Advanced - Introduction + +For advanced users with experience developing applications on EVM-based blockchains, we've provided our own lightweight, custom-made for Unity, Ethereum library: [SequenceEthereum](https://github.com/0xsequence/sequence-unity/tree/master/Assets/SequenceSDK/Ethereum). +SequenceEthereum should provide everything you need to build your Unity app on the EVM, without all the extra bells and whistles that the popular [Nethereum](https://github.com/Nethereum/Nethereum) library provides. + +While SequenceEthereum is heavily tested, in general, when working with asynchronous methods in the library, you should consider them to be "unsafe", in that they may throw Exceptions when used improperly. +In general, wrapping async calls that can potentially throw Exceptions in try catch blocks is a best practice; particularly in Unity, where `Tasks` can fail silently when throwing exceptions - making debugging difficult when not wrapping calls in try catch blocks. + +## Important Components + +When working with the SequenceEthereum library it can be helpful to understand some of the main "components" and how they logically fit together. + +### [Client](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Provider/IEthClient.cs) + +Clients handle the connection to blockchain networks, making various RPC requests. Any time you wish to query the blockchain or submit a transaction, you will need a client. As a rule of thumb, if a method requires a client, you should expect that you will be making a web request and will need to work with async tasks and be prepared to catch any exceptions that are thrown. + +### [Wallet](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Wallet/IWallet.cs) + +A wallet keeps track of its own private/public key pair and address and is responsible for providing its private key to the signer when signing transactions. + +### [Transaction](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Transaction/EthTransaction.cs) + +A transaction, as implemented in `EthTransaction`, contains all the data and parameters for an EVM transaction. The object is used for initiating its [RLP encoding](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/) (transactions must be signed and RLP encoded when submitted). + +Note that all transactions are encoded with a chain id included to protect against replay attacks, see [EIP-155](https://eips.ethereum.org/EIPS/eip-155). + +### [Contract](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Contract/Contract.cs) + +A contract is responsible for creating transactions (for method calls) and messages (for queries) agaisnt it. These transactions are later signed by the wallet and submitted (along with query messages) using a client. + diff --git a/docs/pages/sdk/unity/Advanced/02-wallets.mdx b/docs/pages/sdk/unity/Advanced/02-wallets.mdx new file mode 100644 index 0000000000..5c610a5d6d --- /dev/null +++ b/docs/pages/sdk/unity/Advanced/02-wallets.mdx @@ -0,0 +1,76 @@ +# Wallets + +In the context of SequenceEthereum, a `Wallet` is defined by the `IWallet` interface. There are currently 2 implementations of the `IWallet` interface in this SDK. + +## 1. [EthWallet](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Wallet/EthWallet.cs) + +`EthWallet` is a standard [EOA wallet](https://ethereum.stackexchange.com/questions/5828/what-is-an-eoa-account) for EVM chains. + +An EthWallet is easily created: +``` +IWallet eoaWallet = new EthWallet(); // This will generate a cryptographically random private key +IWallet eoaWallet = new EthWallet(privateKeyString); // Create a wallet using a previously generated private key +``` + +## 2. [WaaSToWalletAdapter](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/WaaS/WaaSToWalletAdapter.cs) + +`WaaSToWalletAdapter` is an adapter that allows you to use a `WaaSWallet` with the same [`IWallet` interface](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Wallet/IWallet.cs) as an `EthWallet` so that it may be used interchangeably with EOA wallets throughout the rest of the SequenceEthereum library. + +A WaaSToWalletAdapter is easily created once you have a WaaSWallet: +``` +IWallet waasAdapter = new WaaSToWalletAdapter(waasWallet); +``` + +## Methods + +The [`IWallet` interface](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Wallet/IWallet.cs) provides a number of methods for you. The most important of which are: + +### GetAddress + +Returns the `Address` for the wallet +``` +Address address = wallet.GetAddress(); +``` + +### SendTransaction + +Signs the given `EthTransaction` and submits it via the given client +``` +string transactionHash = await wallet.SendTransaction(client, transaction); +``` + +### SendTransactionAndWaitForReceipt + +Signs the given `EthTransaction` and submits it via the given client then waits for the `TransactionReceipt` +``` +TransactionReceipt receipt = await wallet.SendTransactionAndWaitForReceipt(client, transaction); +``` + +### SendTransactionBatch + +Signs the given `EthTransaction[]` and submits them via the given client. +If wallet is an `EthWallet`, the transactions will be submitted sequentially, each of which may pass or fail. If the wallet is a `WaaSToWalletAdapter`, the transactions will be batched together into a single transaction that is submitted all at once and either passes or fails as a whole. +Similarly, if a wallet is an `EthWallet` the `string[]` (transaction hashes) you receive will be equal in length to the `EthTransaction[]` you submitted. While, if the wallet is a `WaaSToWalletAdapter`, you will only receive one transaction hash (`string[]` of length 1) +``` +string[] transactionHashes = await wallet.SendTransactionBatch(client, transactions); +``` + +### SendTransactionBatchAndWaitForReceipts + +Signs the given `EthTransaction[]` and submits them via the given client then waits for the `TransactionReceipt[]`. +If wallet is an `EthWallet`, the transactions will be submitted sequentially, each of which may pass or fail. If the wallet is a `WaaSToWalletAdapter`, the transactions will be batched together into a single transaction that is submitted all at once and either passes or fails as a whole. +Similarly, if a wallet is an `EthWallet` the `TransactionReceipt[]` you receive will be equal in length to the `EthTransaction[]` you submitted. While, if the wallet is a `WaaSToWalletAdapter`, you will only receive one transaction receipt (`TransactionReceipt[]` of length 1) +``` +TransactionReceipt[] receipts = await wallet.SendTransactionAndWaitForReceipt(client, transactions); +``` + +### SignMessage + +Given a message and an optional chain id, sign the message using the wallet. Omit the chain id from the signature if not provided +``` +string signedMessage = await wallet.SignMessage(message, chainId) +``` +Note: the chainId is expected to be in hexadecimal format. If you are working with a `Chain` object (recommended), you can use the `AsString` method to get the hexadecimal format of the chain id +``` +string signedMessage = await wallet.SignMessage(message, Chain.Polygon.AsString()); +``` \ No newline at end of file diff --git a/docs/pages/sdk/unity/Advanced/03-clients.mdx b/docs/pages/sdk/unity/Advanced/03-clients.mdx new file mode 100644 index 0000000000..71370c9bd3 --- /dev/null +++ b/docs/pages/sdk/unity/Advanced/03-clients.mdx @@ -0,0 +1,145 @@ +# Clients + +In the context of SequenceEthereum, a `Client` is defined by the [`IEthClient` interface](https://github.com/0xsequence/sequence-unity/blob/master/Assets/SequenceSDK/Ethereum/Provider/IEthClient.cs). + +Creating a client requires a `Chain`. This will use our highly available and responsive Node Gateway service for your RPC requests; accessed using the API key from the Builder you've provided in your `SequenceConfig` scriptable object. If you prefer to use your own RPC URL, you can create a `SequenceEthClient` using a URL string as a parameter instead. + +You can create a client using this snippet: +``` +IEthClient client = new SequenceEthClient(Chain.Polygon); +``` + +## Methods + +As your connection point to Ethereum nodes, there are a number of methods that can be performed by a client, these can be found in the `IEthClient` interface and are implemented by `SequenceEthClient`. + +Note: with the exception of BalanceAt (potentially), most users will not need to make use of these methods, but we have included them in our documentation for completeness. + +### BalanceAt + +Used to get the gas currency balance of a given wallet at a given blockNumber (in hexadecimal format provided as a string) +``` +BigIntegar balance = await client.BalanceAt(wallet.GetAddress()); // By default, if no blockNumber string is provided, check the latest block +BigIntegar balance = await client.BalanceAt(wallet.GetAddress(), blockNumber); +``` +Note: there are two special values for blockNumber. "earliest" will get the balance at the earliest block on the chain. "latest" will get the balance at the latest block on the chain and is the default parameter when none is provided. Otherwise, you'll want to provide the blockNumber string in hexadecimal format. + +Unless you really want to get into the weeds with how things work, it is HIGHLY recommended to move on to the next page of the documentation at this point + +### BlockByNumber + +Used to get the `Block` with a specific block number. +``` +Block block = await client.BlockByNumber(blockNumber); +``` +Note: as above, blockNumber should be in hexadecimal format or special values "ealiest" and "latest" + +### BlockByHash + +Used to get the `Block` by a specified block hash (string) +``` +Block block = await client.BlockByHash(blockHash); +``` + +### BlockNumber + +Used to get the most recent block number in hexadecimal format +``` +string blockNumber = await client.BlockNumber(); +``` + +### BlockRange + +Used to get a `List` from the blocks in a range specified by blockNumbers +``` +List blockRange = await client.BlockRange(startingBlockNumber, endingBlockNumber); +``` +Note: as above, blockNumber should be in hexadecimal format or special values "ealiest" and "latest" + +### ChainID + +Used to get the chain id in hexadecimal format for the chain the client is connected to +``` +string chainId = await client.ChainID(); +``` + +### CodeAt + +Used to get the bytecode for a smart contract at a given address in hexadecimal format at a specified blockNumber +``` +string code = await client.CodeAt(contractAddress, blockNumber); +``` +Note: as above, blockNumber should be in hexadecimal format or special values "ealiest" and "latest" + +### EstimateGas + +Given a `TransactionCall` estimate the amount of gas required for the transaction +``` +BigIntegar gas = await client.EstimateGas(transactionCall); +``` + +### FeeHistory + +Get a `FeeHistoryResult` for gas fees paid blockCount blocks since newestBlock (blockNumber) +``` +FeeHistoryResult feeHistory = await client.FeeHistory(blockCount, newestBlock, new int[] { }); +``` +Note: as above, blockNumber should be in hexadecimal format or special values "ealiest" and "latest" + +### NetworkId + +Used to get the chain id in integer format (as string) for the chain the client is connected to +``` +string networkId = await client.NetworkId(); +``` + +### NonceAt + +Used to get the recommended nonce for a given `Address` at a given blockNumber (defaults to "latest") +``` +BigInteger nonce = await client.NonceAt(wallet.GetAddress()); // Nonce at latest +BigIntegar nonce = await client.NonceAt(wallet.GetAddress(), blockNumber); +``` +Note: as above, blockNumber should be in hexadecimal format or special values "ealiest" and "latest" + +### SendRawTransaction + +Given a signed transaction string, submit the transaction to the network and return a transaction hash +``` +string transactionHash = await client.SendRawTransaction(signedTransactionString); +``` + +### SuggestGasPrice + +Used to get a suggested gas price +``` +BigIntegar gasPrice = await client.SuggestGasPrice(); +``` + +### SuggestGasTipCap + +Used to get the max suggested priority fee for gas +``` +BigIntegar gasTipCap = await client.SuggestGasTipCap(); +``` + +### TransactionByHash + +Used to get a `Transaction` by transaction hash +``` +Transaction transaction = await client.TransactionByHash(transactionHash); +``` + +### TransactionCount + +Used to get the number of transactions in a block by block hash +``` +BigIntegar transactionCount = await client.TransactionCount(blockHash); +``` + +### WaitForTransactionReceipt + +Provide a transaction hash in order to wait for and return the `TransactionReceipt` +``` +TransactionReceipt receipt = await client.WaitForTransactionReceipt(transactionHash); +``` \ No newline at end of file diff --git a/docs/pages/sdk/unity/Advanced/04-transfers.mdx b/docs/pages/sdk/unity/Advanced/04-transfers.mdx new file mode 100644 index 0000000000..2e9135468d --- /dev/null +++ b/docs/pages/sdk/unity/Advanced/04-transfers.mdx @@ -0,0 +1,10 @@ +# Transfers + +In order to transfer ETH (or the gas currency for your network), it is recommended to use `TranferEth.CreateTransaction` + +``` +EthTransaction transferTransaction = await TransferEth.CreateTransaction(client, wallet, recipientAddress, DecimalNormalizer.Normalize(1)); +TransactionReceipt receipt = await wallet.SendTransactionAndWaitForReceipt(client, transferTransaction); +``` + +Behind the scenes, this will create a `GasLimitEstimator` which will construct the transaction for you - including determining the appropriate gasPrice, gasLimit, and nonce. \ No newline at end of file diff --git a/docs/pages/sdk/unity/Advanced/05-contracts.mdx b/docs/pages/sdk/unity/Advanced/05-contracts.mdx new file mode 100644 index 0000000000..3e9bba6a86 --- /dev/null +++ b/docs/pages/sdk/unity/Advanced/05-contracts.mdx @@ -0,0 +1,83 @@ +# Contracts + +Creating a `Contract` object for an already deployed contract is rather straightforward. + +``` +Contract contract = new Contract(contractAddress, abi); +``` +While it is not strictly required, it is highly recommended to provide the contract ABI as a string when creating a contract object. Failure to do so will make it so that you cannot fully take advantage of our ABI encoding and decoding. +If you do chose to go down this route, you will need to provide the entire function signature (function name + parameter types in brackets - e.g. transfer(address,uint256) for the ERC20 transfer method) when calling a function or querying the contract and you will only ever receive a string as a response to queries. + +## Calling Smart Contract Functions + +To call a smart contract, you'll use the `CallFunction` method to create a `CallContractFunction` object which will determine the appropriate gasPrice, gasLimit, nonce, and data to include in a newly assembled `EthTransaction` when provided with a client and a `ContractCall` object to the `Create` async Task + +An example of calling a smart contract would look like: +``` +Contract erc20Contract = new Contract(contractAddress, contractAbi); // We'll use the well-known ERC20 contract as our example case +TransactionReceipt receipt = await erc20Contract.CallFunction("transfer", toAddress, amountAsBigInteger).SendTransactionMethodAndWaitForReceipt(wallet, client); +``` +Note: if you don't want to wait for the receipt, you can use `SendTransactionMethod` instead. + +Alternatively, if you want to simply create the `EthTransaction` and send it at a later time, you can use the `CallContractFunction` object from `CallFunction` directly. +``` +Contract erc20Contract = new Contract(contractAddress, contractAbi); // We'll use the well-known ERC20 contract as our example case +EthTransaction transaction = await erc20Contract.CallFunction("transfer", toAddress, amountAsBigInteger).Create(client, new ContractCall(wallet.GetAddress())); +TransactionReceipt receipt = await wallet.SendTransactionAndWaitForReceipt(client, transaction); + +// or +CallContractFunction transactionCreator = erc20Contract.CallFunction("transfer", toAddress, amountAsBigInteger); +EthTransaction transaction = await transactionCreator.Create(client, new ContractCall(wallet.GetAddress())); +TransactionReceipt receipt = await wallet.SendTransactionAndWaitForReceipt(client, transaction); + +// or +CallContractFunction transactionCreator = erc20Contract.CallFunction("transfer", toAddress, amountAsBigInteger); +TransactionReceipt receipt = await transactionCreator.SendTransactionMethodAndWaitForReceipt(wallet, client); +``` + +You'll notice that the `CallFunction` method accepts an arbitrary number of arguments. You'll want to provide the arguments in the order they are provided in the ABI/function signature. + +## Understanding data type mappings + +When interacting with smart contracts, it is important to understand how EVM datatypes are mapped to C# datatypes in the SequenceEthereum library. + +bool -> bool + +Integers (int, uint, int256, uint8, ...) -> BigInteger + +address -> Address or string + +string -> string + +Fixed bytes (bytesN for any N value) -> FixedByte + +bytes -> byte[] + +If you were to, for example, provide a string where the ABI expects an Integer, you will receive an exception, even if that string could be converted into an integer. + +## Querying Contracts + +To query a smart contract (read data from it), you'll use the `SendQuery` method to query the contract and return the result as type T (if possible). +An example of querying a smart contract would look like: +``` +Contract erc20Contract = new Contract(contractAddress, contractAbi); // We'll use the well-known ERC20 contract as our example case +BigIntegar balance = await erc20Contract.SendQuery(client, "balanceOf", address); +``` + +Alternatively, if you wish to simply construct the query and send it at a later time, you can use `QueryContract` to create a delegate. +``` +Contract erc20Contract = new Contract(contractAddress, contractAbi); // We'll use the well-known ERC20 contract as our example case +QueryContractMessageSender balanceQuery = erc20Contract.QueryContract("balanceOf", address); +BigIntegar balance = await balanceQuery(client); +// or +BigIntegar balance = await balanceQuery.SendQuery(client); +``` + +## Deploying Contracts + +If you want to deploy a contract, you can use the `ContractDeployer` + +``` +ContractDeploymentResult deploymentResult = await ContractDeployer.Deploy(client, wallet, contractBytecodeAsString); +string newlyDeployedContractAddress = deploymentResult.Receipt.contractAddress; +``` diff --git a/docs/pages/sdk/unity/Advanced/06-tokens.mdx b/docs/pages/sdk/unity/Advanced/06-tokens.mdx new file mode 100644 index 0000000000..0567c1aa5f --- /dev/null +++ b/docs/pages/sdk/unity/Advanced/06-tokens.mdx @@ -0,0 +1,31 @@ +# Tokens + +Since their use is so ubiquitous, we've provided `ERC20`, `ERC721`, and `ERC1155` wrappers of the `Contract` class with pre-defined ABIs for your convenience. When interacting with tokens, it is recommended to use these. + +Any of these contract wrappers can be created via a standard constructor requiring only the contract address. For example: +``` +ERC20 erc20 = new ERC20(contractAddress); +``` +You may also provide your own ABI should you need to rewrite our default; however, doing so may require you to modify or rewrite the contract wrappers. + +An example of querying: +``` +string symbol = await erc20.Symbol(client); +BigIntegar balance = await erc20.BalanceOf(client, address); +``` + +An example of sending a transaction: +``` +TransactionReceipt receipt = await erc20.Mint(toAddress, DecimalNormalizer.NormalizeAsBigInteger(1)).SendTransactionMethodAndWaitForReceipt(wallet, client); +``` +As a wrapper of `Contract`, you also have the option to not create the `EthTransaction` and send later on. +``` +CallContractFunction transactionCreator = erc20.Transfer(toAddress, DecimalNormalizer.NormalizeAsBigInteger(1)); +EthTransaction transaction = await transactionCreator.Create(client, new ContractCall(wallet.GetAddress())); +TransactionReceipt receipt = await wallet.SendTransactionAndWaitForReceipt(client, transaction); +``` + +# Bonus: Ownable + +Similar to with tokens, we have also provided an `Ownable` wrapper for your convenience as well which has a pre-defined ABI for methods implementing the [Ownable](https://docs.openzeppelin.com/contracts/2.x/access-control#ownership-and-ownable) interface. +`ERC20`, `ERC721`, and `ERC1155` all inherit from this, but we encourage you to use `Ownable` whenever you wish to interact with the Ownable methods on any arbitrary contract for convenience and safety. \ No newline at end of file diff --git a/docs/pages/solutions/collectibles/contracts/200-deploy-an-item-collection-contract.mdx b/docs/pages/solutions/collectibles/contracts/200-deploy-an-item-collection-contract.mdx index cec3e1dafb..28aa5781f0 100644 --- a/docs/pages/solutions/collectibles/contracts/200-deploy-an-item-collection-contract.mdx +++ b/docs/pages/solutions/collectibles/contracts/200-deploy-an-item-collection-contract.mdx @@ -1,10 +1,7 @@ ---- -slug: /guides/deploy-an-item-collection-contract ---- # How to Deploy an Item Collection Contract -This guide walks through how to setup and deploy a contract on Builder. If you haven't yet done so, make sure you have [signed up for Builder and created a Project](/solutions/builder/getting-started). +This guide walks through how to setup and deploy a contract on Builder. If you haven't yet done so, make sure you have [signed up for Builder and created a Project](/solutions/builder/project-management). ## Step 1: Go to the Contracts section diff --git a/docs/pages/solutions/collectibles/metadata/800-manage-contract-metadata-builder.mdx b/docs/pages/solutions/collectibles/metadata/800-manage-contract-metadata-builder.mdx index 0af67f6672..eb5c39f2b0 100644 --- a/docs/pages/solutions/collectibles/metadata/800-manage-contract-metadata-builder.mdx +++ b/docs/pages/solutions/collectibles/metadata/800-manage-contract-metadata-builder.mdx @@ -1,6 +1,3 @@ ---- -slug: /solutions/collectibles/contracts/manage-contract-metadata-builder ---- # How to Manage Item Metadata in Sequence Builder @@ -31,32 +28,32 @@ Head over to [Pinata.cloud](https://www.pinata.cloud/) and create an account. Up } ``` -![Configure Pinata](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/1.jpeg) +![Configure Pinata](/img/guides/manage-contract-metadata-builder/1.jpeg) ## Step 3: Upload Your Metadata Files Now, gather all your JSON metadata files into a single folder on your computer. Use Pinata's 'Upload \> Folder' feature to upload this folder. Then, copy the CID for the entire folder. -![Upload Metadata](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/2.jpeg) +![Upload Metadata](/img/guides/manage-contract-metadata-builder/2.jpeg) ## Step 4: Get the Folder URL Click on name of the folder you created on Pinata. This will open a new tab showing all your uploaded JSON files. Copy the URL of this folder. -![Get Folder URL from Pinata](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/3.jpeg) +![Get Folder URL from Pinata](/img/guides/manage-contract-metadata-builder/3.jpeg) ## Step 5: Set Up on Sequence Builder Navigate to [Sequence Builder](https://sequence.build/), set up your account, and create your project on the network of your choice. In the Contracts section, click on "Deploy New Contract". -![Configure Contract on Builder](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/4.jpeg) +![Configure Contract on Builder](/img/guides/manage-contract-metadata-builder/4.jpeg) ## Step 6: Deploy Your Contract Select "Web3 Game Item Collection (ERC-1155)" and name your contract. Sequence Builder will automatically deploy your contract on-chain. -![Deploy Contract](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/5.jpeg) +![Deploy Contract](/img/guides/manage-contract-metadata-builder/5.jpeg) ## Step 7: Move to Contract Details Once you sign the transaction, your contract is ready! Click on it to view the details screen. -![Contract Details](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/6.jpeg) +![Contract Details](/img/guides/manage-contract-metadata-builder/6.jpeg) ## Step 8: Update Contract Attributes Navigate to the “Write Contract” section. This is where you can modify attributes of your freshly deployed ERC-1155 contract. Two methods are what you should focus on for now: @@ -72,7 +69,7 @@ https://azure-wooden-lemur-911.mypinata.cloud/ipfs/QmW5gvYGWb98GsN8VjTRWu4pLn6jr Click “Write” and you will be prompted to sign again. This will modify the contract on chain to set the metadata base. Essentially any token ID you provide will be appended to this URL, along with the `.json` suffix. So if you mint token ID 123, it will look for `tokenBaseURI + 123.json`. -![Base Metadata Setup](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/7.jpeg) +![Base Metadata Setup](/img/guides/manage-contract-metadata-builder/7.jpeg) ## Step 10: Minting Time Finally, it's time to mint! Scroll up to `mint`, expand it, and fill in the details: @@ -82,12 +79,12 @@ Finally, it's time to mint! Scroll up to `mint`, expand it, and fill in the deta - `amount (uint256)`: The number of tokens to mint (usually 1). - `data (bytes)`: Enter `0x00` for this simple process. -![Mint test](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/8.jpeg) +![Mint test](/img/guides/manage-contract-metadata-builder/8.jpeg) ## Step 11: Finalize and Admire Click "Write" and sign the transaction. Congratulations, you've just minted a token! Head over to the "Tokens" section to see your minted tokens with their names and images. -![Finalize Minting](/img/solutions/collectibles/contracts/manage-contract-metadata-builder/9.jpeg) +![Finalize Minting](/img/guides/manage-contract-metadata-builder/9.jpeg) ## Step 12: Updating Metadata If you make mistakes with the token metadata, you can always update it and then call the Sequence Metadata refresh endpoint to reload the specific tokens: @@ -98,4 +95,4 @@ curl -X GET "https://metadata.sequence.app/tokens/mumbai/0xb392c99d9f8e3e0b248e5 This is in the format: `https://metadata.sequence.app/tokens////refresh` -Now that you are ready to mint, you might want to read about [how you can launch your own serverless endpoint for securely minting tokens](/guides/templates/template-cloudflare-relayer). +Now that you are ready to mint, you might want to read about [how you can launch your own serverless endpoint for securely minting tokens](/guides/templates/03-mint-collectibles-serverless). diff --git a/docs/pages/solutions/wallets/universal-wallet/03-guides/10-building-backends.mdx b/docs/pages/solutions/wallets/universal-wallet/03-guides/10-building-backends.mdx index f0bac837d8..d12d4cab15 100644 --- a/docs/pages/solutions/wallets/universal-wallet/03-guides/10-building-backends.mdx +++ b/docs/pages/solutions/wallets/universal-wallet/03-guides/10-building-backends.mdx @@ -30,4 +30,4 @@ If your situation for example is a Python or Java backend where you'd like to ve well then, you can call the standard [EIP1271](https://eips.ethereum.org/EIPS/eip-1271) function for the account address from your backend. -If you'd like to use the Sequence's Meta-Transaction capabilities, see [Building Relaying Server with Sequence](/guides/templates/template-go-relayer). +If you'd like to use the Sequence's Meta-Transaction capabilities, see [Building Relaying Server with Sequence](/guides/templates/02-building-relaying-server). diff --git a/docs/public/fonts/Inter-Bold.ttf b/docs/public/fonts/Inter-Bold.ttf index 8e82c70d10..3e24f976cc 100644 Binary files a/docs/public/fonts/Inter-Bold.ttf and b/docs/public/fonts/Inter-Bold.ttf differ diff --git a/docs/public/fonts/Inter-Medium.ttf b/docs/public/fonts/Inter-Medium.ttf index b53fb1c4ac..eeb0aa1387 100644 Binary files a/docs/public/fonts/Inter-Medium.ttf and b/docs/public/fonts/Inter-Medium.ttf differ diff --git a/docs/public/fonts/Inter-Regular.ttf b/docs/public/fonts/Inter-Regular.ttf index 8d4eebf206..c6318fc517 100644 Binary files a/docs/public/fonts/Inter-Regular.ttf and b/docs/public/fonts/Inter-Regular.ttf differ diff --git a/docs/public/fonts/Inter-SemiBold.ttf b/docs/public/fonts/Inter-SemiBold.ttf index c6aeeb16a6..893fd8db7e 100644 Binary files a/docs/public/fonts/Inter-SemiBold.ttf and b/docs/public/fonts/Inter-SemiBold.ttf differ diff --git a/docs/public/fonts/RobotoMono-VariableFont_wght.ttf b/docs/public/fonts/RobotoMono-VariableFont_wght.ttf index 1d5371e6bd..5a2b5bfa8f 100644 Binary files a/docs/public/fonts/RobotoMono-VariableFont_wght.ttf and b/docs/public/fonts/RobotoMono-VariableFont_wght.ttf differ diff --git a/docs/public/img/authorize_connect.png b/docs/public/img/authorize_connect.png new file mode 100644 index 0000000000..a73764d903 --- /dev/null +++ b/docs/public/img/authorize_connect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01f1c8e474f33f0e9f99decd8fa24e2a86feceba4cc3756b97bafb88d5103145 +size 238502 diff --git a/docs/public/img/build/authorize-connect.png b/docs/public/img/build/authorize-connect.png new file mode 100644 index 0000000000..fe3fbf0608 --- /dev/null +++ b/docs/public/img/build/authorize-connect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59c78ea48ff68a6e34cec8e5a21b9c7f9f2e8e1de91b679996886df7e06d5cba +size 68436 diff --git a/docs/public/img/build/fiat-providers.png b/docs/public/img/build/fiat-providers.png new file mode 100644 index 0000000000..5d5d7481a2 --- /dev/null +++ b/docs/public/img/build/fiat-providers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c450e02cb82fbfbe4b7dcd312c37e68488b7e5c147d07ea74f449b77cfde243a +size 39805 diff --git a/docs/public/img/build/seq-chrome-ext-uniswap.png b/docs/public/img/build/seq-chrome-ext-uniswap.png new file mode 100644 index 0000000000..3670021199 --- /dev/null +++ b/docs/public/img/build/seq-chrome-ext-uniswap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3995f139416823bdad00ee98ce5b919efcedb085569ee51418afa0cc5e12e86 +size 344674 diff --git a/docs/public/img/build/seq-chrome-store.png b/docs/public/img/build/seq-chrome-store.png new file mode 100644 index 0000000000..a22a74e357 --- /dev/null +++ b/docs/public/img/build/seq-chrome-store.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf6a05566600366c9997fc737987af08b63dbbc9072c8a1b1fb910ee89318a86 +size 219015 diff --git a/docs/public/img/build/sign-in-connect.png b/docs/public/img/build/sign-in-connect.png new file mode 100644 index 0000000000..7a63ec8936 --- /dev/null +++ b/docs/public/img/build/sign-in-connect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51005c8b5c0139ece2cb59f6902d01a6622cf43360972d9fa16a1c6f5ab22e8d +size 1505617 diff --git a/docs/public/img/build/sign-in-fresh.png b/docs/public/img/build/sign-in-fresh.png new file mode 100644 index 0000000000..3984cc23dc --- /dev/null +++ b/docs/public/img/build/sign-in-fresh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ac05f519a8a66f7412fc077e989f3351bf2e464ea73cb27f31eb57f8bff0302 +size 1572474 diff --git a/docs/public/img/build/switch-testnet-mode.png b/docs/public/img/build/switch-testnet-mode.png new file mode 100644 index 0000000000..42da40e796 --- /dev/null +++ b/docs/public/img/build/switch-testnet-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49ed7806556a8be28a58f76ca9873c1d912f436c90c38e45138215a3afd568d9 +size 686805 diff --git a/docs/public/img/builder/builder_accept_terms_signup_project.png b/docs/public/img/builder/builder_accept_terms_signup_project.png new file mode 100644 index 0000000000..7aaa9bb14d --- /dev/null +++ b/docs/public/img/builder/builder_accept_terms_signup_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acedc0ba3ec7d96a199bc5c02764c4d7572044977ec3d1f449443c2c66660aa0 +size 275455 diff --git a/docs/public/img/builder/builder_add_gas.png b/docs/public/img/builder/builder_add_gas.png new file mode 100644 index 0000000000..823b56c6c9 --- /dev/null +++ b/docs/public/img/builder/builder_add_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:249e8942106320e1dd3ba2b452bc6ae530bc0abb3261a48b8439c6fd76ab056a +size 91000 diff --git a/docs/public/img/builder/builder_add_sponsored_address.png b/docs/public/img/builder/builder_add_sponsored_address.png new file mode 100644 index 0000000000..039f1946b5 --- /dev/null +++ b/docs/public/img/builder/builder_add_sponsored_address.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f94fde078d1c0b833a969caffab60cf382873bd54c5f9222dac60926bc7f053c +size 123796 diff --git a/docs/public/img/builder/builder_choose_contract_mint_collectibles.png b/docs/public/img/builder/builder_choose_contract_mint_collectibles.png new file mode 100644 index 0000000000..c62f268b7c --- /dev/null +++ b/docs/public/img/builder/builder_choose_contract_mint_collectibles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43145fcddd8b000dafc571d4a3f97bc030fbf7029943755bdb9cedf6b75b657a +size 259322 diff --git a/docs/public/img/builder/builder_choose_contract_mint_currency.png b/docs/public/img/builder/builder_choose_contract_mint_currency.png new file mode 100644 index 0000000000..83115a0eb7 --- /dev/null +++ b/docs/public/img/builder/builder_choose_contract_mint_currency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:828b863c9bdc07ffbfcacb7145264843e3283697ca5a04840c08516cfaaca863 +size 288990 diff --git a/docs/public/img/builder/builder_choose_contract_sponsor_gas.png b/docs/public/img/builder/builder_choose_contract_sponsor_gas.png new file mode 100644 index 0000000000..08bb9cf23b --- /dev/null +++ b/docs/public/img/builder/builder_choose_contract_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c52cc075e9728f26fcddd6a6623d2844465e88723689aabdf9d7eb18d1965276 +size 282802 diff --git a/docs/public/img/builder/builder_choose_signin_signup_project.png b/docs/public/img/builder/builder_choose_signin_signup_project.png new file mode 100644 index 0000000000..a92720c361 --- /dev/null +++ b/docs/public/img/builder/builder_choose_signin_signup_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7b3a54cdd49dfa7f3089268b4e0a902d5cbe2649d6564b3b7d4ccc70388d021 +size 643379 diff --git a/docs/public/img/builder/builder_click_add_refill_gas.png b/docs/public/img/builder/builder_click_add_refill_gas.png new file mode 100644 index 0000000000..f55cfbe778 --- /dev/null +++ b/docs/public/img/builder/builder_click_add_refill_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62fc8caa58246e2f22c89c388813cc4766566d745a4e5915a79c5a02f9264c4a +size 254276 diff --git a/docs/public/img/builder/builder_collaborators_preview_video.png b/docs/public/img/builder/builder_collaborators_preview_video.png new file mode 100644 index 0000000000..1f29f41577 --- /dev/null +++ b/docs/public/img/builder/builder_collaborators_preview_video.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a67e5728bc7acd6fdbbd2cc54593da7c57c1261f08d0d50203e2e621fc63040a +size 1137709 diff --git a/docs/public/img/builder/builder_confirm_contract_sponsor_gas.png b/docs/public/img/builder/builder_confirm_contract_sponsor_gas.png new file mode 100644 index 0000000000..1cb4245dd7 --- /dev/null +++ b/docs/public/img/builder/builder_confirm_contract_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0916fdb1ccbec6e200afa22a7bb56e85ef88fc7e28a405509739e7a314751c25 +size 229969 diff --git a/docs/public/img/builder/builder_confirm_deployment_for_contract_deploy.png b/docs/public/img/builder/builder_confirm_deployment_for_contract_deploy.png new file mode 100644 index 0000000000..f0b93b868a --- /dev/null +++ b/docs/public/img/builder/builder_confirm_deployment_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c496b241ed832d8b148db44037c22f565ffbdbab6d6b69ffad8cb15bb0d834a +size 161779 diff --git a/docs/public/img/builder/builder_confirm_mint_collectibles.png b/docs/public/img/builder/builder_confirm_mint_collectibles.png new file mode 100644 index 0000000000..863ad6f9f9 --- /dev/null +++ b/docs/public/img/builder/builder_confirm_mint_collectibles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbf09d78ce314cb7ee6af01b6c5aed711335d4fc40e2f57bb8d1b4bfd219e700 +size 270712 diff --git a/docs/public/img/builder/builder_confirm_mint_currency.png b/docs/public/img/builder/builder_confirm_mint_currency.png new file mode 100644 index 0000000000..f7c09b01f7 --- /dev/null +++ b/docs/public/img/builder/builder_confirm_mint_currency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eedf9ea5487144bba81628ec6caa732ff4ed6e040b5286613f80b482d3cc1753 +size 251117 diff --git a/docs/public/img/builder/builder_confirm_mint_items_mint_achievements.png b/docs/public/img/builder/builder_confirm_mint_items_mint_achievements.png new file mode 100644 index 0000000000..ce15302e79 --- /dev/null +++ b/docs/public/img/builder/builder_confirm_mint_items_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9b0253fd6eed26b35dda93cad54f388ece6cfc18226577eeadbacbeade8bed5 +size 281122 diff --git a/docs/public/img/builder/builder_confirm_nft_mint_achievements.png b/docs/public/img/builder/builder_confirm_nft_mint_achievements.png new file mode 100644 index 0000000000..9b7597123d --- /dev/null +++ b/docs/public/img/builder/builder_confirm_nft_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a3ed32ee39e495cf0abc084922859e099245b8c0c7b7094d92d70f3b50ba101 +size 237835 diff --git a/docs/public/img/builder/builder_confirm_pause_sponsor_gas.png b/docs/public/img/builder/builder_confirm_pause_sponsor_gas.png new file mode 100644 index 0000000000..48c37be18d --- /dev/null +++ b/docs/public/img/builder/builder_confirm_pause_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56370aadaf8eeeaf0e0d5123889af8bb3fa6926e1628250273d2eeec200fa292 +size 224668 diff --git a/docs/public/img/builder/builder_contract_permissions_dropdown.png b/docs/public/img/builder/builder_contract_permissions_dropdown.png new file mode 100644 index 0000000000..48b4d6cb6e --- /dev/null +++ b/docs/public/img/builder/builder_contract_permissions_dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ef392730e81d34e8ef1d011eec7cf81a2b731c23c289a6906d2687a1b7b974 +size 127862 diff --git a/docs/public/img/builder/builder_contract_permissions_transaction.png b/docs/public/img/builder/builder_contract_permissions_transaction.png new file mode 100644 index 0000000000..7fa3f6cde8 --- /dev/null +++ b/docs/public/img/builder/builder_contract_permissions_transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:335cb7f0f73e5be35418b51a6c827955f0766f1127131024afec906e6dd6ea04 +size 121692 diff --git a/docs/public/img/builder/builder_contract_settings_sponsor_gas.png b/docs/public/img/builder/builder_contract_settings_sponsor_gas.png new file mode 100644 index 0000000000..22e850b96e --- /dev/null +++ b/docs/public/img/builder/builder_contract_settings_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b1c72145ecd644ab3b763c49cacdaf9d8adfa9cb472f5334745d874c0a4cc02 +size 240098 diff --git a/docs/public/img/builder/builder_contract_specific_permissions.png b/docs/public/img/builder/builder_contract_specific_permissions.png new file mode 100644 index 0000000000..9e565c2755 --- /dev/null +++ b/docs/public/img/builder/builder_contract_specific_permissions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95e30fbb84f038d223c6dc61dd2f8e780e42ba1500b70b1c5cae09c0b7f0eb68 +size 92724 diff --git a/docs/public/img/builder/builder_contract_specific_settings.png b/docs/public/img/builder/builder_contract_specific_settings.png new file mode 100644 index 0000000000..4447cc9cfb --- /dev/null +++ b/docs/public/img/builder/builder_contract_specific_settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce0026dba171f5c415fa99a46b4b75951e8298c965b1bf56c1909eeded46b233 +size 73779 diff --git a/docs/public/img/builder/builder_create_dapp.png b/docs/public/img/builder/builder_create_dapp.png new file mode 100644 index 0000000000..edaed14f20 --- /dev/null +++ b/docs/public/img/builder/builder_create_dapp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54e7a582562212899bb24a13f94db84cdff70a357562e3f6b538ba18205d74a7 +size 41219 diff --git a/docs/public/img/builder/builder_create_new_contract_for_contract_deploy.png b/docs/public/img/builder/builder_create_new_contract_for_contract_deploy.png new file mode 100644 index 0000000000..ae5f6444de --- /dev/null +++ b/docs/public/img/builder/builder_create_new_contract_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60fd12dc326b958fbe216bddbe3544434690529ebdd1fb2240cf7234eb551003 +size 53372 diff --git a/docs/public/img/builder/builder_create_new_project.png b/docs/public/img/builder/builder_create_new_project.png new file mode 100644 index 0000000000..97b2d464a8 --- /dev/null +++ b/docs/public/img/builder/builder_create_new_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd98f6ec72a975c6494f0689443962d0a2ac4933e33b672ab92cbc4bdb59f029 +size 307970 diff --git a/docs/public/img/builder/builder_create_new_project_for_contract_deploy.png b/docs/public/img/builder/builder_create_new_project_for_contract_deploy.png new file mode 100644 index 0000000000..c283361225 --- /dev/null +++ b/docs/public/img/builder/builder_create_new_project_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1f1d469b4f3808f9d4a8e93964af5638b8f4dc608f2358cc8b742b0d04d7157 +size 33230 diff --git a/docs/public/img/builder/builder_creditcard_checkout_refill_gas.png b/docs/public/img/builder/builder_creditcard_checkout_refill_gas.png new file mode 100644 index 0000000000..43981806b6 --- /dev/null +++ b/docs/public/img/builder/builder_creditcard_checkout_refill_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bca4b22dcf422ef68327016dc7e5de86d00bc56f80e144b524f179409fb1b0e +size 218094 diff --git a/docs/public/img/builder/builder_dashboard_signup_project.png b/docs/public/img/builder/builder_dashboard_signup_project.png new file mode 100644 index 0000000000..90ba3a75ba --- /dev/null +++ b/docs/public/img/builder/builder_dashboard_signup_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:358cca20032e9302807e400e802e2b08936fc1bba94999c96178eb25e0a3866c +size 249427 diff --git a/docs/public/img/builder/builder_deploy_contracts.png b/docs/public/img/builder/builder_deploy_contracts.png new file mode 100644 index 0000000000..4051c9164e --- /dev/null +++ b/docs/public/img/builder/builder_deploy_contracts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4a66c8817d059250a69ecc004f6b09f24493e8006774038338639cdc93a7ffc +size 4338082 diff --git a/docs/public/img/builder/builder_edit_contract_sponsor_gas.png b/docs/public/img/builder/builder_edit_contract_sponsor_gas.png new file mode 100644 index 0000000000..f0fc4ecf97 --- /dev/null +++ b/docs/public/img/builder/builder_edit_contract_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:019fe12bc9c38409edcf3217f08c9013ff1208b8508b2482c8521a46661664c8 +size 258424 diff --git a/docs/public/img/builder/builder_enter_details_signup_project.png b/docs/public/img/builder/builder_enter_details_signup_project.png new file mode 100644 index 0000000000..0bddd10af8 --- /dev/null +++ b/docs/public/img/builder/builder_enter_details_signup_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9e6d61e3086c509d7caab703dbae2a9c29ca758d2d7cf2daa36f4f3972a19d9 +size 268645 diff --git a/docs/public/img/builder/builder_fill_mint_details_mint_achievements.png b/docs/public/img/builder/builder_fill_mint_details_mint_achievements.png new file mode 100644 index 0000000000..88a072bfbf --- /dev/null +++ b/docs/public/img/builder/builder_fill_mint_details_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e7c546e2501dac7a6aa4955cf0bdc7bd1f6f5767170840fdf1a7f3132f143c2 +size 256174 diff --git a/docs/public/img/builder/builder_fill_mint_details_mint_collectibles.png b/docs/public/img/builder/builder_fill_mint_details_mint_collectibles.png new file mode 100644 index 0000000000..3f0a73ce1f --- /dev/null +++ b/docs/public/img/builder/builder_fill_mint_details_mint_collectibles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5a3874f513f88c21f379d669a3026d83c7b8e6d41e1f0bfe317ac09629e040f +size 226442 diff --git a/docs/public/img/builder/builder_fill_mint_details_mint_currency.png b/docs/public/img/builder/builder_fill_mint_details_mint_currency.png new file mode 100644 index 0000000000..44f8fefd41 --- /dev/null +++ b/docs/public/img/builder/builder_fill_mint_details_mint_currency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c93d88e485d0eab85af7130319e5a018279cfe2fe26886f290251037936daa59 +size 389813 diff --git a/docs/public/img/builder/builder_gas_tank.png b/docs/public/img/builder/builder_gas_tank.png new file mode 100644 index 0000000000..9205b63339 --- /dev/null +++ b/docs/public/img/builder/builder_gas_tank.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:371d46b5f57e2255fc0a83f23a81216730db6e18c58af196583c0cf1e4bc538c +size 99025 diff --git a/docs/public/img/builder/builder_go_to_tank_refill_gas.png b/docs/public/img/builder/builder_go_to_tank_refill_gas.png new file mode 100644 index 0000000000..d44af96926 --- /dev/null +++ b/docs/public/img/builder/builder_go_to_tank_refill_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f80e76551d3b63c0344b58149c8c28d4467d6bb0fd28a7a0f010ecab56f86c7d +size 222721 diff --git a/docs/public/img/builder/builder_indexer_preview_video.png b/docs/public/img/builder/builder_indexer_preview_video.png new file mode 100644 index 0000000000..557dac93ba --- /dev/null +++ b/docs/public/img/builder/builder_indexer_preview_video.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32849007dc9e8d63088e20dbcfa7832f95b04b7d5b6797918476fd4799d00142 +size 1045817 diff --git a/docs/public/img/builder/builder_landing_page_signup_project.png b/docs/public/img/builder/builder_landing_page_signup_project.png new file mode 100644 index 0000000000..669e394dea --- /dev/null +++ b/docs/public/img/builder/builder_landing_page_signup_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c4e53effd981862aef981244b41b0ad695e2676e89e1b51adf6e2502ec08353 +size 802066 diff --git a/docs/public/img/builder/builder_marketplace_preview_video.png b/docs/public/img/builder/builder_marketplace_preview_video.png new file mode 100644 index 0000000000..723b72aa18 --- /dev/null +++ b/docs/public/img/builder/builder_marketplace_preview_video.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2946fef6ff84c173005a6b1e77a73ea6cbb3dc9115eebfbd243d17c5f2a6e5cd +size 1047391 diff --git a/docs/public/img/builder/builder_more_contracts_for_contract_deploy.png b/docs/public/img/builder/builder_more_contracts_for_contract_deploy.png new file mode 100644 index 0000000000..2a59ab4983 --- /dev/null +++ b/docs/public/img/builder/builder_more_contracts_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3124720c68917cd2f5043b6c712573b8c9bb3086c857ffe80ffe41842a2e2dca +size 341498 diff --git a/docs/public/img/builder/builder_navigate_write_contract_mint_achievements.png b/docs/public/img/builder/builder_navigate_write_contract_mint_achievements.png new file mode 100644 index 0000000000..bda8ee6335 --- /dev/null +++ b/docs/public/img/builder/builder_navigate_write_contract_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e342cdc40d6a3d071146387cb4e7b557d9e53ca427070eeebf59dee2c76d8638 +size 275007 diff --git a/docs/public/img/builder/builder_new_dapp.png b/docs/public/img/builder/builder_new_dapp.png new file mode 100644 index 0000000000..2e0d7764af --- /dev/null +++ b/docs/public/img/builder/builder_new_dapp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4cdcfa627327fab51f37f80ae9f724cf2fa4d71e8fe020c45d1662392c9c2ad +size 97599 diff --git a/docs/public/img/builder/builder_new_project_details_for_contract_deploy.png b/docs/public/img/builder/builder_new_project_details_for_contract_deploy.png new file mode 100644 index 0000000000..ee1cf23e71 --- /dev/null +++ b/docs/public/img/builder/builder_new_project_details_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19d67d7f7b7f83c5dc4118fe5fd180df9244d6d85052f325ade3d228e56206c2 +size 58461 diff --git a/docs/public/img/builder/builder_node_gateway_preview_video.png b/docs/public/img/builder/builder_node_gateway_preview_video.png new file mode 100644 index 0000000000..b330515f27 --- /dev/null +++ b/docs/public/img/builder/builder_node_gateway_preview_video.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0ded162189e50ccdc75c272e4f639d7a74c1176fdbd75b6df5813121195e69d +size 963241 diff --git a/docs/public/img/builder/builder_project_created_signup_project.png b/docs/public/img/builder/builder_project_created_signup_project.png new file mode 100644 index 0000000000..217c96b801 --- /dev/null +++ b/docs/public/img/builder/builder_project_created_signup_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8de589b81d6c93589bc1fadbf82ee3b4b7010a461acb9173bbb459d7f607c427 +size 249357 diff --git a/docs/public/img/builder/builder_project_dashboard_create_project.png b/docs/public/img/builder/builder_project_dashboard_create_project.png new file mode 100644 index 0000000000..0ceeafc1c5 --- /dev/null +++ b/docs/public/img/builder/builder_project_dashboard_create_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3ceb28e923671c35197b5e666ca28c4ef21df0a2b71621fd5481aeed487ca4b +size 108308 diff --git a/docs/public/img/builder/builder_provide_contract_details_for_contract_deploy.png b/docs/public/img/builder/builder_provide_contract_details_for_contract_deploy.png new file mode 100644 index 0000000000..956c655cd0 --- /dev/null +++ b/docs/public/img/builder/builder_provide_contract_details_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d87a96dac8a94101e95d654fb2c5aaab3f66b6d5f1ce23d479bdd40de7402bd +size 61540 diff --git a/docs/public/img/builder/builder_refill_amount_refill_gas.png b/docs/public/img/builder/builder_refill_amount_refill_gas.png new file mode 100644 index 0000000000..0ff7f4d9fb --- /dev/null +++ b/docs/public/img/builder/builder_refill_amount_refill_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d95fd4a863f63bfdf6981d39e2a11f3cd5c6341cac9d655035d1f909e7329a41 +size 214357 diff --git a/docs/public/img/builder/builder_refill_success_refill_gas.png b/docs/public/img/builder/builder_refill_success_refill_gas.png new file mode 100644 index 0000000000..55540ac91c --- /dev/null +++ b/docs/public/img/builder/builder_refill_success_refill_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:163a4521bd2295c99a2439d9f41589764359de96ca64dd680de69992dcda04d9 +size 270575 diff --git a/docs/public/img/builder/builder_see_wallet_for_contract_deploy.png b/docs/public/img/builder/builder_see_wallet_for_contract_deploy.png new file mode 100644 index 0000000000..3d37757ccb --- /dev/null +++ b/docs/public/img/builder/builder_see_wallet_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7070e857dca92e990fdc54710b54e55f3622d2f18162dfa9b706d79f1d7bb751 +size 54527 diff --git a/docs/public/img/builder/builder_select_add_address_sponsor_gas.png b/docs/public/img/builder/builder_select_add_address_sponsor_gas.png new file mode 100644 index 0000000000..d3a944c8a3 --- /dev/null +++ b/docs/public/img/builder/builder_select_add_address_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edf614f32455ce8f98bdf5fe3f896c00c7f8084c23edf8094f4b77c9152ca0e3 +size 225355 diff --git a/docs/public/img/builder/builder_select_contract_for_contract_deploy.png b/docs/public/img/builder/builder_select_contract_for_contract_deploy.png new file mode 100644 index 0000000000..cfa269a549 --- /dev/null +++ b/docs/public/img/builder/builder_select_contract_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad36076df0d51b202c8be8cfcbf4ba070ea10df0e656a22ff0254d433c0941c2 +size 302368 diff --git a/docs/public/img/builder/builder_select_contract_mint_achievements.png b/docs/public/img/builder/builder_select_contract_mint_achievements.png new file mode 100644 index 0000000000..7a368f4ddb --- /dev/null +++ b/docs/public/img/builder/builder_select_contract_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f8aa2962ed26f9d1c993451fdca8fe4fc94f0fc91ca6e80b309393cb0e883ff +size 261088 diff --git a/docs/public/img/builder/builder_select_gas_tank_sponsor_gas.png b/docs/public/img/builder/builder_select_gas_tank_sponsor_gas.png new file mode 100644 index 0000000000..d44af96926 --- /dev/null +++ b/docs/public/img/builder/builder_select_gas_tank_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f80e76551d3b63c0344b58149c8c28d4467d6bb0fd28a7a0f010ecab56f86c7d +size 222721 diff --git a/docs/public/img/builder/builder_select_mint_method_mint_achievements.png b/docs/public/img/builder/builder_select_mint_method_mint_achievements.png new file mode 100644 index 0000000000..712b6220ef --- /dev/null +++ b/docs/public/img/builder/builder_select_mint_method_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2a0f049e9fc3559b76c218cad58b000b4ead64a48de3e1fc0fbab925423d6c6 +size 517801 diff --git a/docs/public/img/builder/builder_select_mint_method_mint_collectibles.png b/docs/public/img/builder/builder_select_mint_method_mint_collectibles.png new file mode 100644 index 0000000000..101b1e1414 --- /dev/null +++ b/docs/public/img/builder/builder_select_mint_method_mint_collectibles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81cb1d32bbcbc131022e674a2d1b51999c8ea291036c439283daa3f344edb873 +size 480185 diff --git a/docs/public/img/builder/builder_select_mint_method_mint_currency.png b/docs/public/img/builder/builder_select_mint_method_mint_currency.png new file mode 100644 index 0000000000..266e74ffcc --- /dev/null +++ b/docs/public/img/builder/builder_select_mint_method_mint_currency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faf06490340cd20225defcc082473235c3742b0a7d7d62984e07f10e27ee51cc +size 477630 diff --git a/docs/public/img/builder/builder_select_project_refill_gas.png b/docs/public/img/builder/builder_select_project_refill_gas.png new file mode 100644 index 0000000000..7e655b788f --- /dev/null +++ b/docs/public/img/builder/builder_select_project_refill_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:641955e1c7bab67deb6c13ad333903e4e2d0c5bec55ab09a5251c7b1b82f13cc +size 217399 diff --git a/docs/public/img/builder/builder_select_write_contract_mint_collectibles.png b/docs/public/img/builder/builder_select_write_contract_mint_collectibles.png new file mode 100644 index 0000000000..8e126a938c --- /dev/null +++ b/docs/public/img/builder/builder_select_write_contract_mint_collectibles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c2f590e1a11bfa26e52abe973e20def1d39c32de6ed461dd02b4c3d1961bca3 +size 252598 diff --git a/docs/public/img/builder/builder_select_write_contract_mint_currency.png b/docs/public/img/builder/builder_select_write_contract_mint_currency.png new file mode 100644 index 0000000000..a3fc22315a --- /dev/null +++ b/docs/public/img/builder/builder_select_write_contract_mint_currency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09e97f700aa6bdeee88dfd8c9e895ec7cab508b67a05ad12c472a100da15d235 +size 249136 diff --git a/docs/public/img/builder/builder_sequence_kit_preview_video.png b/docs/public/img/builder/builder_sequence_kit_preview_video.png new file mode 100644 index 0000000000..5a83971238 --- /dev/null +++ b/docs/public/img/builder/builder_sequence_kit_preview_video.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d703e676816778520074994e726ae287dab0bd463f52e7b44ae989fe9367b315 +size 1043195 diff --git a/docs/public/img/builder/builder_settings_api_key_dashboard.png b/docs/public/img/builder/builder_settings_api_key_dashboard.png new file mode 100644 index 0000000000..0eb0578d91 --- /dev/null +++ b/docs/public/img/builder/builder_settings_api_key_dashboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:907258ea0e7d170578e4ed0680566cc41dac8b78d096c1f2a70da7309f000cb1 +size 143256 diff --git a/docs/public/img/builder/builder_settings_api_key_details.png b/docs/public/img/builder/builder_settings_api_key_details.png new file mode 100644 index 0000000000..8917ea8999 --- /dev/null +++ b/docs/public/img/builder/builder_settings_api_key_details.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49aae00aceefd496287c53a61ee7c2152731ef9f44c72a4b48631c040a55870d +size 101707 diff --git a/docs/public/img/builder/builder_settings_select_api_key.png b/docs/public/img/builder/builder_settings_select_api_key.png new file mode 100644 index 0000000000..17a74578f7 --- /dev/null +++ b/docs/public/img/builder/builder_settings_select_api_key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee8b90e4ac3cbe2f3a8f7fe0f513ba026c9588f8a909f6ad96d5877039b93ca3 +size 138756 diff --git a/docs/public/img/builder/builder_sign_transaction_for_contract_deploy.png b/docs/public/img/builder/builder_sign_transaction_for_contract_deploy.png new file mode 100644 index 0000000000..09ec09d827 --- /dev/null +++ b/docs/public/img/builder/builder_sign_transaction_for_contract_deploy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6296cf739c59eec06bc2111f3bf5ddaffd17c9c7ac61fc7f66a1b7687c163592 +size 173726 diff --git a/docs/public/img/builder/builder_sign_transaction_mint_achievements.png b/docs/public/img/builder/builder_sign_transaction_mint_achievements.png new file mode 100644 index 0000000000..8eb4bbf2f4 --- /dev/null +++ b/docs/public/img/builder/builder_sign_transaction_mint_achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2977b84d3858ecba7f800586713f10d95a3c15369053350deec7c18af7aa8f25 +size 560801 diff --git a/docs/public/img/builder/builder_sign_transaction_mint_collectibles.png b/docs/public/img/builder/builder_sign_transaction_mint_collectibles.png new file mode 100644 index 0000000000..a530687f7f --- /dev/null +++ b/docs/public/img/builder/builder_sign_transaction_mint_collectibles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4a7ee73df1cc29668623ec7119d1f0ca20835240aaa4e28c53c8dd32fd92d19 +size 523821 diff --git a/docs/public/img/builder/builder_sign_transaction_mint_currency.png b/docs/public/img/builder/builder_sign_transaction_mint_currency.png new file mode 100644 index 0000000000..76d0c06bbf --- /dev/null +++ b/docs/public/img/builder/builder_sign_transaction_mint_currency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ebd33a1b6fa8e9c4a943fae40fea8900bbf2cfb865e04f57370d9b1f5cbb615 +size 593382 diff --git a/docs/public/img/builder/builder_sponsor_gas.png b/docs/public/img/builder/builder_sponsor_gas.png new file mode 100644 index 0000000000..9a596fc614 --- /dev/null +++ b/docs/public/img/builder/builder_sponsor_gas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:013d71e8282b65b5328dcc7e597aeba860de89385381f938f8d186698dd88b86 +size 1041035 diff --git a/docs/public/img/builder/builder_start_a_new_project.png b/docs/public/img/builder/builder_start_a_new_project.png new file mode 100644 index 0000000000..b365bb5957 --- /dev/null +++ b/docs/public/img/builder/builder_start_a_new_project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d82a1db4a1c8a3928ff6f289acf516bc3e1a112319ecd46e2e324db7215cd6b1 +size 2690017 diff --git a/docs/public/img/builder/delete-project-modal.png b/docs/public/img/builder/delete-project-modal.png new file mode 100644 index 0000000000..a6f4dbb569 --- /dev/null +++ b/docs/public/img/builder/delete-project-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d919343ec5000995005571abc97a72c25d9cdb0e110e563e877a61075cc96a6 +size 74427 diff --git a/docs/public/img/builder/delete-project.png b/docs/public/img/builder/delete-project.png new file mode 100644 index 0000000000..5c72b5880a --- /dev/null +++ b/docs/public/img/builder/delete-project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d628f15604988efcfad42bb4fe9ada8a6f257835ef83b8b7d808a1d9af545da +size 137529 diff --git a/docs/public/img/builder/select-project.png b/docs/public/img/builder/select-project.png new file mode 100644 index 0000000000..dd2513d3c9 --- /dev/null +++ b/docs/public/img/builder/select-project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eee35416d7c228e91aae6edfedd81847774fff360e31f6cb0150037c75141456 +size 107308 diff --git a/docs/public/img/builder/select-settings.png b/docs/public/img/builder/select-settings.png new file mode 100644 index 0000000000..fbe698ea3e --- /dev/null +++ b/docs/public/img/builder/select-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:142eacfb6d98ca7c5462699e156ac81e80c7424170f2bb71367aff4f17cf5a77 +size 116467 diff --git a/docs/public/img/builder/settings-api-access-keys-add-api-access-key-modal.png b/docs/public/img/builder/settings-api-access-keys-add-api-access-key-modal.png new file mode 100644 index 0000000000..6b0bfc2ec9 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-add-api-access-key-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e440abfc44a4006e35a12fc52c8cd8240887f31906b44a51711df91a96fd884 +size 87535 diff --git a/docs/public/img/builder/settings-api-access-keys-add-domains.png b/docs/public/img/builder/settings-api-access-keys-add-domains.png new file mode 100644 index 0000000000..ff34f20261 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-add-domains.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51a709518430149046a5d38fa2ec1bb7ada8363276d98a2f61f7d88807e7c98d +size 164933 diff --git a/docs/public/img/builder/settings-api-access-keys-check-services.png b/docs/public/img/builder/settings-api-access-keys-check-services.png new file mode 100644 index 0000000000..19ab4a41c0 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-check-services.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69807fb5827291b5918a18729a9dffb603e12d6166dedcc2fe3c1cf3e7c7a121 +size 170296 diff --git a/docs/public/img/builder/settings-api-access-keys-copy-key.png b/docs/public/img/builder/settings-api-access-keys-copy-key.png new file mode 100644 index 0000000000..12bda39351 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-copy-key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3ec70a83c4d066d6f9599aea91d6ddc975b542c60e13a39e4e448c353ace3ce +size 139967 diff --git a/docs/public/img/builder/settings-api-access-keys-delete-key-modal.png b/docs/public/img/builder/settings-api-access-keys-delete-key-modal.png new file mode 100644 index 0000000000..673f887e01 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-delete-key-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f37e04262fccede6cf98e2f719c9bf4074d28428186d08ded6f0fa5c80d5a7c0 +size 89042 diff --git a/docs/public/img/builder/settings-api-access-keys-delete-key.png b/docs/public/img/builder/settings-api-access-keys-delete-key.png new file mode 100644 index 0000000000..b75215b368 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-delete-key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abdecad8ed6d82a3b9f88b7728dac88843f44506b85a5207a9f4d9a5aec329a1 +size 135248 diff --git a/docs/public/img/builder/settings-api-access-keys-rename-key.png b/docs/public/img/builder/settings-api-access-keys-rename-key.png new file mode 100644 index 0000000000..3a9a097501 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-rename-key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c00e28ea6ede19fefd258eebd258b1c30275e2c6960bad963e89746848205e8f +size 157493 diff --git a/docs/public/img/builder/settings-api-access-keys-rotate-key.png b/docs/public/img/builder/settings-api-access-keys-rotate-key.png new file mode 100644 index 0000000000..25ce29a6d4 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-rotate-key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4967226273cfadbea9dfffb5b64ff137c98f5ab1bd95a6dff58201f10aee1789 +size 140748 diff --git a/docs/public/img/builder/settings-api-access-keys-select-add-api-access-key.png b/docs/public/img/builder/settings-api-access-keys-select-add-api-access-key.png new file mode 100644 index 0000000000..a975e30e4d --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-select-add-api-access-key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3108421c637b670835a9a2bfd588dc63ae37a654417e235378afa578d085f92e +size 126898 diff --git a/docs/public/img/builder/settings-api-access-keys-select-api-key-for-rename.png b/docs/public/img/builder/settings-api-access-keys-select-api-key-for-rename.png new file mode 100644 index 0000000000..013d25b38a --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-select-api-key-for-rename.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e9b90fa659c59b8c6b1a9526bdf0c153f89855035eb6c543fe3f316f8c3c633 +size 117761 diff --git a/docs/public/img/builder/settings-api-access-keys-select-api-key.png b/docs/public/img/builder/settings-api-access-keys-select-api-key.png new file mode 100644 index 0000000000..121630ea91 --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys-select-api-key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c29eb648983a4d5865e46e259d0f762720c53c4cc97c3e3338ec95b0374710e +size 120834 diff --git a/docs/public/img/builder/settings-api-access-keys.png b/docs/public/img/builder/settings-api-access-keys.png new file mode 100644 index 0000000000..d6a4c751dc --- /dev/null +++ b/docs/public/img/builder/settings-api-access-keys.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b385442b0e556709c6907955b373e90464ff7820c691dedf785cc00e8a92b88c +size 93134 diff --git a/docs/public/img/builder/settings-billing-checkout.png b/docs/public/img/builder/settings-billing-checkout.png new file mode 100644 index 0000000000..ab04f09343 --- /dev/null +++ b/docs/public/img/builder/settings-billing-checkout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1f4c30987532d3d581895e18e678eba9a1bc61e7f48a86aa9bfec3792eee3e1 +size 114252 diff --git a/docs/public/img/builder/settings-billing-overage-modal.png b/docs/public/img/builder/settings-billing-overage-modal.png new file mode 100644 index 0000000000..4bb338e12c --- /dev/null +++ b/docs/public/img/builder/settings-billing-overage-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57f01ba148cf14f49602c75982c16aadad8dc16b3032ac45982b67b70313e2ab +size 77343 diff --git a/docs/public/img/builder/settings-billing-select-upgrade-plan.png b/docs/public/img/builder/settings-billing-select-upgrade-plan.png new file mode 100644 index 0000000000..b56d34a5be --- /dev/null +++ b/docs/public/img/builder/settings-billing-select-upgrade-plan.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eec32101e38223ec3557bebb7bfe6812a667a9dfd0d3283b40dc06be07c75011 +size 134292 diff --git a/docs/public/img/builder/settings-billing-set-overage.png b/docs/public/img/builder/settings-billing-set-overage.png new file mode 100644 index 0000000000..6a2a6d63cb --- /dev/null +++ b/docs/public/img/builder/settings-billing-set-overage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c78056b2af9c86ad22e302b3b8855ad6c2903de836a11aac2ec0501ea7cb6fdf +size 121992 diff --git a/docs/public/img/builder/settings-billing-upgrade-plan-dashboard.png b/docs/public/img/builder/settings-billing-upgrade-plan-dashboard.png new file mode 100644 index 0000000000..dfa6c691ed --- /dev/null +++ b/docs/public/img/builder/settings-billing-upgrade-plan-dashboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37370a07b30b458fb79c4da7737bbf9102356a87a27e9d791c4fe085c802b7f0 +size 262604 diff --git a/docs/public/img/builder/settings-collaborators-add-collaborator-modal.png b/docs/public/img/builder/settings-collaborators-add-collaborator-modal.png new file mode 100644 index 0000000000..e992f4d002 --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-add-collaborator-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6caaf2cbb8b76b76790e299ba9067b14f0c82643953b5401571c4bac9df1cd4 +size 85109 diff --git a/docs/public/img/builder/settings-collaborators-confirm-collaborator.png b/docs/public/img/builder/settings-collaborators-confirm-collaborator.png new file mode 100644 index 0000000000..6f3880eebe --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-confirm-collaborator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cbfd7d75d007fab4d03ec4e4e7e83e28945c05efc728b67884f62272e863211 +size 92591 diff --git a/docs/public/img/builder/settings-collaborators-confirm-delete-modal.png b/docs/public/img/builder/settings-collaborators-confirm-delete-modal.png new file mode 100644 index 0000000000..da844a043b --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-confirm-delete-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85bbde81e63b1ac02bf1d9d783ead3f7f9c29e1893696cf752e74dec85d5462d +size 79321 diff --git a/docs/public/img/builder/settings-collaborators-confirm-invite-deleted.png b/docs/public/img/builder/settings-collaborators-confirm-invite-deleted.png new file mode 100644 index 0000000000..762d68dd6c --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-confirm-invite-deleted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7135d87b76bb6cb3bc1dbbcafbcd25795113540ea690e58c1dd2d8643f5bea34 +size 97973 diff --git a/docs/public/img/builder/settings-collaborators-confirm-invite-link.png b/docs/public/img/builder/settings-collaborators-confirm-invite-link.png new file mode 100644 index 0000000000..bac3dbd48d --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-confirm-invite-link.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df9d9fafe2362a506b831f664897497a1495cc580a3b0fb335024c1799267e7b +size 116238 diff --git a/docs/public/img/builder/settings-collaborators-create-invite-link-modal.png b/docs/public/img/builder/settings-collaborators-create-invite-link-modal.png new file mode 100644 index 0000000000..7be8cc5dbc --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-create-invite-link-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72c94b67b022ea276c31ce9601dbc5482d10627d07fab32bcd02ce1e1ce401a1 +size 89185 diff --git a/docs/public/img/builder/settings-collaborators-select-add-collaborator.png b/docs/public/img/builder/settings-collaborators-select-add-collaborator.png new file mode 100644 index 0000000000..3e545024bc --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-select-add-collaborator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ad1089a6363db25ab13c7e3a2a1dd001181c66c2245841ab97b032a979c3710 +size 108644 diff --git a/docs/public/img/builder/settings-collaborators-select-copy-link.png b/docs/public/img/builder/settings-collaborators-select-copy-link.png new file mode 100644 index 0000000000..4786d7fb8b --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-select-copy-link.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ce372cbd6f4db5cfbf9c0f1d919e2539bbfc4912423a9bf298d4c25161c583d +size 128575 diff --git a/docs/public/img/builder/settings-collaborators-select-create-invite-link.png b/docs/public/img/builder/settings-collaborators-select-create-invite-link.png new file mode 100644 index 0000000000..524d450312 --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-select-create-invite-link.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcc9defd4a8ab6e11ac1a88e67de8129a24e278eabf8518e35f0fcec2c878a56 +size 114176 diff --git a/docs/public/img/builder/settings-collaborators-select-delete-link.png b/docs/public/img/builder/settings-collaborators-select-delete-link.png new file mode 100644 index 0000000000..3a035a5ef6 --- /dev/null +++ b/docs/public/img/builder/settings-collaborators-select-delete-link.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d497c3f2f34555f61af22c077e54f1fb7d2e2ae9981e7246b2ceefcf89df24b +size 124309 diff --git a/docs/public/img/builder/settings-collaborators.png b/docs/public/img/builder/settings-collaborators.png new file mode 100644 index 0000000000..fb8d672875 --- /dev/null +++ b/docs/public/img/builder/settings-collaborators.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00d450f0460a803d2c755effa2321c0679dc71d0e81d273db62d9e15090fa671 +size 82454 diff --git a/docs/public/img/builder/settings-general.png b/docs/public/img/builder/settings-general.png new file mode 100644 index 0000000000..2380fd9e04 --- /dev/null +++ b/docs/public/img/builder/settings-general.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d8ff8c299771f13f4db8b144feab8ff2b64d4064f3cca69fa4b8ef1be840368 +size 82900 diff --git a/docs/public/img/builder/settings-networks.png b/docs/public/img/builder/settings-networks.png new file mode 100644 index 0000000000..5e98e84cb7 --- /dev/null +++ b/docs/public/img/builder/settings-networks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa3d34e4f9a7c74a0fbf7adcc0bbd5c9ba8ffa70b7cce4cad6d3e27a0141c4c7 +size 152477 diff --git a/docs/public/img/builder/settings-select-api-access-keys.png b/docs/public/img/builder/settings-select-api-access-keys.png new file mode 100644 index 0000000000..2d5365da22 --- /dev/null +++ b/docs/public/img/builder/settings-select-api-access-keys.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ae871ec13c40d76d831b58ec34d80b11c6b2b99672c12f5bf11ecd8442f87cb +size 138833 diff --git a/docs/public/img/builder/settings-select-billing.png b/docs/public/img/builder/settings-select-billing.png new file mode 100644 index 0000000000..019d224be1 --- /dev/null +++ b/docs/public/img/builder/settings-select-billing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48d3f2f8f1689fc22f1e71c3340e1c37724fba0a3906d1d3f60e941c57d216fc +size 136879 diff --git a/docs/public/img/builder/settings-select-collaborators.png b/docs/public/img/builder/settings-select-collaborators.png new file mode 100644 index 0000000000..e6e7f8e0e1 --- /dev/null +++ b/docs/public/img/builder/settings-select-collaborators.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:295e5928608b21f1fbcba9f82c36106301be10f03c8315f70bc5004e4661cb24 +size 144238 diff --git a/docs/public/img/builder/settings-select-general.png b/docs/public/img/builder/settings-select-general.png new file mode 100644 index 0000000000..1a7964731c --- /dev/null +++ b/docs/public/img/builder/settings-select-general.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89be730a1b6b3fb1e904e7c72bf7c8a75da4dd407e3dd868aa5f186856ac81d2 +size 144572 diff --git a/docs/public/img/builder/settings-select-networks.png b/docs/public/img/builder/settings-select-networks.png new file mode 100644 index 0000000000..b502e14e08 --- /dev/null +++ b/docs/public/img/builder/settings-select-networks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9cecfc1f97b49af94b1de7a2f6faa8c30f0c693ebce4b7a6dbdd5cc06b4585f +size 140880 diff --git a/docs/public/img/dapps/demodapp/demodapp.png b/docs/public/img/dapps/demodapp/demodapp.png new file mode 100644 index 0000000000..f1d51fe55b --- /dev/null +++ b/docs/public/img/dapps/demodapp/demodapp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd80c54ef33d2e3df97a390cb89709065b695a0ebfa75f3a4bac6d8fc0aeb623 +size 62899 diff --git a/docs/public/img/dapps/skyweaver/skyweaver-card-view.png b/docs/public/img/dapps/skyweaver/skyweaver-card-view.png new file mode 100644 index 0000000000..99008cd99a --- /dev/null +++ b/docs/public/img/dapps/skyweaver/skyweaver-card-view.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b88be1aac8072df679e2322c41307d2e9d3c9d9d22a08efea5c885d4ad74d32a +size 618331 diff --git a/docs/public/img/dapps/skyweaver/skyweaver-cart.png b/docs/public/img/dapps/skyweaver/skyweaver-cart.png new file mode 100644 index 0000000000..80a12f4309 --- /dev/null +++ b/docs/public/img/dapps/skyweaver/skyweaver-cart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64ddc260999c96f85f950921b2eccb9b4e2cf3f3321ae04fca7638b7060ca087 +size 369618 diff --git a/docs/public/img/dapps/skyweaver/skyweaver-market.png b/docs/public/img/dapps/skyweaver/skyweaver-market.png new file mode 100644 index 0000000000..586ca02025 --- /dev/null +++ b/docs/public/img/dapps/skyweaver/skyweaver-market.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1334090862009a8199c7f550a7e3922e15407806ce7edeb3b47a22118854d78e +size 877157 diff --git a/docs/public/img/dapps/vaportrade/vaportrade-connect.png b/docs/public/img/dapps/vaportrade/vaportrade-connect.png new file mode 100644 index 0000000000..6ac1097a28 --- /dev/null +++ b/docs/public/img/dapps/vaportrade/vaportrade-connect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1e4e53335368c612f0618c1945e1444edebfe86646557d7300fb75e1e296da5 +size 202106 diff --git a/docs/public/img/dapps/vaportrade/vaportrade-nft.png b/docs/public/img/dapps/vaportrade/vaportrade-nft.png new file mode 100644 index 0000000000..23c8fafaff --- /dev/null +++ b/docs/public/img/dapps/vaportrade/vaportrade-nft.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:026fd952013392ef13bd546c737349dd509f1f78f1af7d501f19c6697381ad3c +size 140878 diff --git a/docs/public/img/dapps/vaportrade/vaportrade-trade.png b/docs/public/img/dapps/vaportrade/vaportrade-trade.png new file mode 100644 index 0000000000..c5257a8544 --- /dev/null +++ b/docs/public/img/dapps/vaportrade/vaportrade-trade.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04759ad08d32ac3b02935a9905bf97480aab71e1d6c6804b64e147ed4e060788 +size 42051 diff --git a/docs/public/img/dapps/vaportrade/vaportrade-wallet.png b/docs/public/img/dapps/vaportrade/vaportrade-wallet.png new file mode 100644 index 0000000000..ad9fcf4dcc --- /dev/null +++ b/docs/public/img/dapps/vaportrade/vaportrade-wallet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59f0a801016bcc0d7d11e2216c3e8905f7df7608f1cd7af482c63daab94d5a98 +size 187861 diff --git a/docs/public/img/diagrams/waas/auth-overview.drawio.svg b/docs/public/img/diagrams/waas/auth-overview.drawio.svg new file mode 100644 index 0000000000..b4e17009dd --- /dev/null +++ b/docs/public/img/diagrams/waas/auth-overview.drawio.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbe3b2e17376242fd67c885ea3f8824bb420216c0b625329f272171c2f3ef0c4 +size 26486 diff --git a/docs/public/img/diagrams/waas/standalone-overview.drawio.svg b/docs/public/img/diagrams/waas/standalone-overview.drawio.svg new file mode 100644 index 0000000000..9c230ac252 --- /dev/null +++ b/docs/public/img/diagrams/waas/standalone-overview.drawio.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89084092237337cdfe9baa0fa68be82b9975f8d104a5c125d253b82891356cca +size 28015 diff --git a/docs/public/img/eth-love.jpg b/docs/public/img/eth-love.jpg new file mode 100644 index 0000000000..a8df6b6534 --- /dev/null +++ b/docs/public/img/eth-love.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025105dbf37fa992916f89ef53f0a17aa5b6ceeb7f0c03e7bde7867cda88b8e5 +size 491080 diff --git a/docs/public/img/favicon.ico b/docs/public/img/favicon.ico new file mode 100644 index 0000000000..1c37d8af4b --- /dev/null +++ b/docs/public/img/favicon.ico @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c6a4d886bef88a891bce78dc9ff86696ff101ff230cfc61491404a9bd93a39d +size 67646 diff --git a/docs/public/img/fiat-providers.png b/docs/public/img/fiat-providers.png new file mode 100644 index 0000000000..b83423fb08 --- /dev/null +++ b/docs/public/img/fiat-providers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1870b051abdd18d74c38dffc4835fee2270f073fb21a837bb5683bdae12a5cd +size 61582 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/1.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/1.jpeg new file mode 100644 index 0000000000..85922656d3 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61d1dd43be7d743c23d3560b7ef14e7eb5ae4a1f10b870cdde4b07cf5ef2331d +size 128447 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/2.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/2.jpeg new file mode 100644 index 0000000000..4d9ec4c26a --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1ea941cee86cfb313532e272a0e1dc5b4f3341133b8fa3fb1b8add1c7e9dd9d +size 139450 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/3.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/3.jpeg new file mode 100644 index 0000000000..700cc2b651 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a39b01ec8cf2dda110b63796adef5aa8915ae7b7268d8b5300e41d5fe21bc3d +size 201450 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/4.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/4.jpeg new file mode 100644 index 0000000000..e5e5920383 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/4.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e8a1ca42498772807d806022d39c7f3e9a4c9f5c6142745444d2b8405aa855 +size 87973 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/5.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/5.jpeg new file mode 100644 index 0000000000..86ffd20509 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/5.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff7f3948c003cd8c5343b0fd6eb44cefed0f5a8c913cee3460d749582ecb5358 +size 131847 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/6.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/6.jpeg new file mode 100644 index 0000000000..0dbe119a90 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/6.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69b77b0af4d62666311a1ab5d29d73806d7119d8a9165403f8e598e95a7e7b7c +size 61498 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/7.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/7.jpeg new file mode 100644 index 0000000000..e44d1cc685 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/7.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c7224c7f7dcbbfda0792eb711fc1e610224d3828bcbe239b7c94f83b9e65f8f +size 199644 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/8.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/8.jpeg new file mode 100644 index 0000000000..2491e38944 --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/8.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55d120966ef8a59234fd0b747ec978e599aecc12d2d7ae6df793d870edf3ea46 +size 193693 diff --git a/docs/public/img/guides/manage-contract-metadata-builder/9.jpeg b/docs/public/img/guides/manage-contract-metadata-builder/9.jpeg new file mode 100644 index 0000000000..d7715ea67e --- /dev/null +++ b/docs/public/img/guides/manage-contract-metadata-builder/9.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b972ca4c80c7525db83b1cb7705d6742d1df332643274dbbc8c8cef25f2d0f0d +size 181061 diff --git a/docs/public/img/horizon-dark-mode.svg b/docs/public/img/horizon-dark-mode.svg new file mode 100644 index 0000000000..86b6d3e841 --- /dev/null +++ b/docs/public/img/horizon-dark-mode.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cb7999f9ac21d172b1ccbbfb99867ecc3da07567d15fb25b961173f4b2ccc5b +size 9667 diff --git a/docs/public/img/horizon-light-mode.svg b/docs/public/img/horizon-light-mode.svg new file mode 100644 index 0000000000..0df4f5bd21 --- /dev/null +++ b/docs/public/img/horizon-light-mode.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d290f3b1234e5273c2668949634638ee566e2b866f4864b7ee222730df17f167 +size 9670 diff --git a/docs/public/img/horizon-logo.png b/docs/public/img/horizon-logo.png new file mode 100755 index 0000000000..b53376c6ee --- /dev/null +++ b/docs/public/img/horizon-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a625133644c23e8724dc3fd34aa132d69b36b316808b0ba9eb8b8e9f030b16c +size 4165 diff --git a/docs/public/img/icons/chevron.svg b/docs/public/img/icons/chevron.svg new file mode 100644 index 0000000000..acdb44150f --- /dev/null +++ b/docs/public/img/icons/chevron.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cece6d7190cc0b06707f7d4605ba3c23f496a6c59b6f10cc39579718b50160eb +size 232 diff --git a/docs/public/img/icons/close-icon.svg b/docs/public/img/icons/close-icon.svg new file mode 100644 index 0000000000..ec59f54940 --- /dev/null +++ b/docs/public/img/icons/close-icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bb37ad8f192a445e86803c4ea271fdd5e6011058edfb591825fd4f489d9e369 +size 324 diff --git a/docs/public/img/icons/dark-mode-icon.svg b/docs/public/img/icons/dark-mode-icon.svg new file mode 100644 index 0000000000..77f99a01a6 --- /dev/null +++ b/docs/public/img/icons/dark-mode-icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7881db85a9c14d004a0abf9a710fcc8879371d041667a9a7183a29c2d76788ad +size 4196 diff --git a/docs/public/img/icons/discord-icon-dark.svg b/docs/public/img/icons/discord-icon-dark.svg new file mode 100644 index 0000000000..66b8ac290a --- /dev/null +++ b/docs/public/img/icons/discord-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e91337691af5e399b5fc78aee97742856b990d00426bfa40bf0315056f5be17f +size 2011 diff --git a/docs/public/img/icons/discord-icon-light.svg b/docs/public/img/icons/discord-icon-light.svg new file mode 100644 index 0000000000..f50cb50546 --- /dev/null +++ b/docs/public/img/icons/discord-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bf93974176a1c7a29d198fd97f1413bd10b33c24220aad9ec973d15d7ff17c4 +size 2011 diff --git a/docs/public/img/icons/email-icon-dark.svg b/docs/public/img/icons/email-icon-dark.svg new file mode 100644 index 0000000000..b6de1c343b --- /dev/null +++ b/docs/public/img/icons/email-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89404327aaedc6170c64afd29782443bde947f1ab2fc186cd907f7657b03891e +size 531 diff --git a/docs/public/img/icons/email-icon-light.svg b/docs/public/img/icons/email-icon-light.svg new file mode 100644 index 0000000000..5bc751c094 --- /dev/null +++ b/docs/public/img/icons/email-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45419918e517d6d1d50c9a627221a381cf0ab0c66dfdb30ff2f5d9b05c2c232 +size 531 diff --git a/docs/public/img/icons/faq-icon-dark.svg b/docs/public/img/icons/faq-icon-dark.svg new file mode 100644 index 0000000000..7d4c65a478 --- /dev/null +++ b/docs/public/img/icons/faq-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3a7fcfe0e97fc376841b43680dc1485e6273b34170996d18bbd3e98c26f9ae4 +size 1928 diff --git a/docs/public/img/icons/faq-icon-light.svg b/docs/public/img/icons/faq-icon-light.svg new file mode 100644 index 0000000000..e5ccdea015 --- /dev/null +++ b/docs/public/img/icons/faq-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b00e9e7b0262924ed4cabf27579b664d0dad0a4972f2738a171e190890c0b62d +size 1928 diff --git a/docs/public/img/icons/gas-icon-dark.svg b/docs/public/img/icons/gas-icon-dark.svg new file mode 100644 index 0000000000..cfe12f390c --- /dev/null +++ b/docs/public/img/icons/gas-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2719aae74d8c325374e034d59f15d2b7862d0ae210991803498f10ce113050f0 +size 865 diff --git a/docs/public/img/icons/gas-icon-light.svg b/docs/public/img/icons/gas-icon-light.svg new file mode 100644 index 0000000000..050393c0b5 --- /dev/null +++ b/docs/public/img/icons/gas-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e978b3d988655b2c74e02203c7cd5de01c064287e538b7b807e21f59820edd0a +size 865 diff --git a/docs/public/img/icons/github-icon-dark.svg b/docs/public/img/icons/github-icon-dark.svg new file mode 100644 index 0000000000..8e4771e195 --- /dev/null +++ b/docs/public/img/icons/github-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:449013c9640c4bd3e56d82d1d615aa12684c0cc16a0ab56e058d0e21594ecbed +size 1183 diff --git a/docs/public/img/icons/github-icon-light.svg b/docs/public/img/icons/github-icon-light.svg new file mode 100644 index 0000000000..e86cf231d9 --- /dev/null +++ b/docs/public/img/icons/github-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1195238b37212332949f3567271d94f9a447988e5cd64c4458d9402a572345c5 +size 1183 diff --git a/docs/public/img/icons/hamburger-icon.svg b/docs/public/img/icons/hamburger-icon.svg new file mode 100644 index 0000000000..2813e21a66 --- /dev/null +++ b/docs/public/img/icons/hamburger-icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d65b475d7dcf8b8885eefe2cb997328d3d828ae0dcedd698fea4525ff9eee1e6 +size 216 diff --git a/docs/public/img/icons/light-mode-icon.svg b/docs/public/img/icons/light-mode-icon.svg new file mode 100644 index 0000000000..8633ba47c4 --- /dev/null +++ b/docs/public/img/icons/light-mode-icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5c5798f7769165ae2f04cf1b0c559696cab4ee794b1f82652300373aef2fbf3 +size 4196 diff --git a/docs/public/img/icons/mag-dark.svg b/docs/public/img/icons/mag-dark.svg new file mode 100644 index 0000000000..dd6c81549d --- /dev/null +++ b/docs/public/img/icons/mag-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c53b19d681eba92f909a7f8273186a3faea513c4850b8ec9598ac8981d54bd3a +size 782 diff --git a/docs/public/img/icons/mag-light.svg b/docs/public/img/icons/mag-light.svg new file mode 100644 index 0000000000..dd5b035aad --- /dev/null +++ b/docs/public/img/icons/mag-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61a75641a561c1770786cd18604911554e49f0f42250d7979aa71e0c96d22e2c +size 781 diff --git a/docs/public/img/icons/multi-chain-icon-dark.svg b/docs/public/img/icons/multi-chain-icon-dark.svg new file mode 100644 index 0000000000..5a625c5d56 --- /dev/null +++ b/docs/public/img/icons/multi-chain-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a39a9fe943f66da8c361fa5e89edd217390f9667f0f9be4bc2482ce9a0e78ba6 +size 4575 diff --git a/docs/public/img/icons/multi-chain-icon-light.svg b/docs/public/img/icons/multi-chain-icon-light.svg new file mode 100644 index 0000000000..eb5a150433 --- /dev/null +++ b/docs/public/img/icons/multi-chain-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9abecdb6cb0c420529eb021d87afff4efb4a2b59c52ec420bda3fe89bac6efca +size 4575 diff --git a/docs/public/img/icons/sequence-composite-dark.svg b/docs/public/img/icons/sequence-composite-dark.svg new file mode 100644 index 0000000000..30edf395cd --- /dev/null +++ b/docs/public/img/icons/sequence-composite-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7da08810cbbadd2704f2429df907c56ead2f24681ac24a266e2c57717f5b346c +size 8899 diff --git a/docs/public/img/icons/sequence-composite-light.svg b/docs/public/img/icons/sequence-composite-light.svg new file mode 100644 index 0000000000..c314d16fea --- /dev/null +++ b/docs/public/img/icons/sequence-composite-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:705aa92db4cc6f4cb606209ee8e02a1c74509b3e3b2f4fbaacab3764b2422d73 +size 8899 diff --git a/docs/public/img/icons/twitter-icon-dark.svg b/docs/public/img/icons/twitter-icon-dark.svg new file mode 100644 index 0000000000..f2a024b127 --- /dev/null +++ b/docs/public/img/icons/twitter-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e40c7bf9e4fee6af9575169795499ef5ee693ce3a55e7029ed872c88fe9d79d7 +size 958 diff --git a/docs/public/img/icons/twitter-icon-light.svg b/docs/public/img/icons/twitter-icon-light.svg new file mode 100644 index 0000000000..1cc14373d6 --- /dev/null +++ b/docs/public/img/icons/twitter-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dab705a3f6d31c1c41bde6b6233077ac81c98aa0904b28e437b284b7d57015a +size 958 diff --git a/docs/public/img/icons/wallet-icon-dark.svg b/docs/public/img/icons/wallet-icon-dark.svg new file mode 100644 index 0000000000..dcad4baeff --- /dev/null +++ b/docs/public/img/icons/wallet-icon-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e41c33dc24770629d3d1459d99390cd728e88c4c64c20afa99cacaf39feb46be +size 2779 diff --git a/docs/public/img/icons/wallet-icon-light.svg b/docs/public/img/icons/wallet-icon-light.svg new file mode 100644 index 0000000000..ef82de1f32 --- /dev/null +++ b/docs/public/img/icons/wallet-icon-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04411204b47f5ffee394d961f6624828e9c6616ad18a1e26c00bcaffbef59b9a +size 2779 diff --git a/docs/public/img/image52.svg b/docs/public/img/image52.svg new file mode 100644 index 0000000000..8e4455be90 --- /dev/null +++ b/docs/public/img/image52.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6263778f0b05b567895991aa46cb4d2402e64535f5814d16db1cd39df7660950 +size 3332147 diff --git a/docs/public/img/kit/auth-options.png b/docs/public/img/kit/auth-options.png new file mode 100644 index 0000000000..65b5ce9f86 --- /dev/null +++ b/docs/public/img/kit/auth-options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2761965818962ae14a4a6838597dc92925e72b98a91fc1cfb6b430416322b94a +size 21812 diff --git a/docs/public/img/kit/checkout-modal.png b/docs/public/img/kit/checkout-modal.png new file mode 100644 index 0000000000..de510913e4 --- /dev/null +++ b/docs/public/img/kit/checkout-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3de7395dd2c754362622f7560a0fc6f6b31de37d35e623ff2c9455fda7d0c277 +size 42103 diff --git a/docs/public/img/kit/dark-mode-logo.png b/docs/public/img/kit/dark-mode-logo.png new file mode 100644 index 0000000000..6e1ab64b18 --- /dev/null +++ b/docs/public/img/kit/dark-mode-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:301af85ac33808df66c0e2d7c37a9c5a3d1bbc5ca0d37bfaef7565fc3b65a96a +size 25919 diff --git a/docs/public/img/kit/email-input.png b/docs/public/img/kit/email-input.png new file mode 100644 index 0000000000..ee7a2401ec --- /dev/null +++ b/docs/public/img/kit/email-input.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb4dd44514177b127dd18bbe5263eb4f2a3f1f23c7db5a0cd1eed2829de59b7f +size 21640 diff --git a/docs/public/img/kit/embedded-wallet.png b/docs/public/img/kit/embedded-wallet.png new file mode 100644 index 0000000000..0bb48b09af --- /dev/null +++ b/docs/public/img/kit/embedded-wallet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a320097d1681678e14d30d09270d539be80c16d49cbe86b084e1dac3e1f9054 +size 140110 diff --git a/docs/public/img/kit/kit-demo.png b/docs/public/img/kit/kit-demo.png new file mode 100644 index 0000000000..0d6135fa12 --- /dev/null +++ b/docs/public/img/kit/kit-demo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84fbb25b7e8ab20d6a48b39da8fe719f5c7e7247c3182e4bfc6986fda2fd1765 +size 18365 diff --git a/docs/public/img/kit/kit-logo-in-one.png b/docs/public/img/kit/kit-logo-in-one.png new file mode 100644 index 0000000000..33b362ccbc --- /dev/null +++ b/docs/public/img/kit/kit-logo-in-one.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f648a852ac05e82845cf587cea8a3a44d2641021e3cf9499a9379044499eb22c +size 94653 diff --git a/docs/public/img/kit/kit-logo-text.svg b/docs/public/img/kit/kit-logo-text.svg new file mode 100644 index 0000000000..0680a5dac2 --- /dev/null +++ b/docs/public/img/kit/kit-logo-text.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:858a84b26bf44f06fff1af799f96c5bba7b5c783961a05b6e11fd894e2e2e431 +size 894 diff --git a/docs/public/img/kit/kit-logo.svg b/docs/public/img/kit/kit-logo.svg new file mode 100644 index 0000000000..2e370706f1 --- /dev/null +++ b/docs/public/img/kit/kit-logo.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b0d0f567e694ef361b5ca03801f227dbfcc0974e2bee95274b3a82250727a5a +size 5653 diff --git a/docs/public/img/kit/light-mode-logo.png b/docs/public/img/kit/light-mode-logo.png new file mode 100644 index 0000000000..b135b1f7fa --- /dev/null +++ b/docs/public/img/kit/light-mode-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a8f8334b2b7d5ba392ac7f472ab1f0b8f67d495fd96d9169a8ded8dc75652c4 +size 26364 diff --git a/docs/public/img/kit/mini-auth-options.png b/docs/public/img/kit/mini-auth-options.png new file mode 100644 index 0000000000..1c39782379 --- /dev/null +++ b/docs/public/img/kit/mini-auth-options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:650d1c698cfb3f1932ea52ef9f9342c1bc3dd0e8cc0889ab0d6e0984cabf63ed +size 22115 diff --git a/docs/public/img/kit/project-name.png b/docs/public/img/kit/project-name.png new file mode 100644 index 0000000000..dc5ae8991f --- /dev/null +++ b/docs/public/img/kit/project-name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b43b4f4fe036aacdeb3b6e9ba86dc35146d2276f923257e11e6952d248dd4fb +size 21620 diff --git a/docs/public/img/kit/sign-in-modal.png b/docs/public/img/kit/sign-in-modal.png new file mode 100644 index 0000000000..b337b453ae --- /dev/null +++ b/docs/public/img/kit/sign-in-modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b1349134d39b9cabaac6a734cb35be3a0160bb48c356471c30e06bd6ad218e4 +size 20814 diff --git a/docs/public/img/logo-dark.svg b/docs/public/img/logo-dark.svg new file mode 100644 index 0000000000..e027f3f446 --- /dev/null +++ b/docs/public/img/logo-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d773a0e13667fa8592161d2d04d5d9ee58b11c14fcec69b84cffdab3f1c777be +size 8873 diff --git a/docs/public/img/logo-light.svg b/docs/public/img/logo-light.svg new file mode 100644 index 0000000000..ad89c84290 --- /dev/null +++ b/docs/public/img/logo-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f428a4924c3071896f8afc1a2dc6e530a7b4d868969eb3e6c68e308f4983b3a +size 8873 diff --git a/docs/public/img/marketplace/activities.png b/docs/public/img/marketplace/activities.png new file mode 100644 index 0000000000..b2369db856 --- /dev/null +++ b/docs/public/img/marketplace/activities.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00a086ad505a62b554e2d47a829a994ac29595f82ef3855da6ea605f7683ecd1 +size 44698 diff --git a/docs/public/img/marketplace/listings.png b/docs/public/img/marketplace/listings.png new file mode 100644 index 0000000000..1bd57cda22 --- /dev/null +++ b/docs/public/img/marketplace/listings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23d1bbd4fd58dc8390eca5053582b6670cf633bb2ea067449316857d722e57bd +size 208875 diff --git a/docs/public/img/networks/1.png b/docs/public/img/networks/1.png new file mode 100644 index 0000000000..dcbdc4ce9d --- /dev/null +++ b/docs/public/img/networks/1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d32f0b1accc0947881b01a819215f7b28d22b27ce4a760bbbc351a680912e6c9 +size 3583 diff --git a/docs/public/img/networks/10.png b/docs/public/img/networks/10.png new file mode 100644 index 0000000000..201ff8b28d --- /dev/null +++ b/docs/public/img/networks/10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:570aec5f3629e01f1536661b3aca5ecf41ae9e1d9bde8677477c04edee6d4949 +size 3556 diff --git a/docs/public/img/networks/100.png b/docs/public/img/networks/100.png new file mode 100644 index 0000000000..586bba79f3 --- /dev/null +++ b/docs/public/img/networks/100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf3a0cbf59017ecf914c808ab655db58eca6625b955e9471024ce320817c7278 +size 5368 diff --git a/docs/public/img/networks/1101.png b/docs/public/img/networks/1101.png new file mode 100644 index 0000000000..3392287646 --- /dev/null +++ b/docs/public/img/networks/1101.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d0b8ff95d41693649394429e22f81f9236f664d82e084edae3c745c00c76e6b +size 21572 diff --git a/docs/public/img/networks/137.png b/docs/public/img/networks/137.png new file mode 100644 index 0000000000..ca50c26dde --- /dev/null +++ b/docs/public/img/networks/137.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac872af4dd8264dc9db9f0f9cfa20dbe6449ce36956a8e287a0c90176236f675 +size 4062 diff --git a/docs/public/img/networks/19011.png b/docs/public/img/networks/19011.png new file mode 100644 index 0000000000..6f858465cf --- /dev/null +++ b/docs/public/img/networks/19011.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c48a2aa8791bb57549f6249d7f83f38327c416f760ad849e1f741e0b95b79c5 +size 25583 diff --git a/docs/public/img/networks/250.png b/docs/public/img/networks/250.png new file mode 100644 index 0000000000..d3306c5c2a --- /dev/null +++ b/docs/public/img/networks/250.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2aa72264fb9469b28cc9217d1e2945a4c2d75cb7b9a07362779dbb11261a26a1 +size 4533 diff --git a/docs/public/img/networks/42161.png b/docs/public/img/networks/42161.png new file mode 100644 index 0000000000..ff67d55b42 --- /dev/null +++ b/docs/public/img/networks/42161.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90b816d48d6e2ec61127397f34a9acc7b95d26d775e316acd8af387fc7802d49 +size 9951 diff --git a/docs/public/img/networks/42170.png b/docs/public/img/networks/42170.png new file mode 100644 index 0000000000..f015b37947 --- /dev/null +++ b/docs/public/img/networks/42170.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bb54aabe63765815088d126656dac1e842ee0c5c3d70e81b6fe71589146ac6 +size 3714 diff --git a/docs/public/img/networks/43114.png b/docs/public/img/networks/43114.png new file mode 100644 index 0000000000..42d57ed001 --- /dev/null +++ b/docs/public/img/networks/43114.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f33ca5721bdc808827ec07209ff9358ee6f6eda10aa8240702f5d260d554030a +size 3422 diff --git a/docs/public/img/networks/56.png b/docs/public/img/networks/56.png new file mode 100644 index 0000000000..1c75585f4f --- /dev/null +++ b/docs/public/img/networks/56.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06b98271105f88617f38c20025735a566205a4550bf2d83ba8c24ddb93cc6dc6 +size 6790 diff --git a/docs/public/img/networks/64.png b/docs/public/img/networks/64.png new file mode 100644 index 0000000000..1763071045 --- /dev/null +++ b/docs/public/img/networks/64.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9a92dd2aac02e20986352d14c5cf7504da941beafaa9fdd88340e65482a601 +size 12767 diff --git a/docs/public/img/networks/8453.png b/docs/public/img/networks/8453.png new file mode 100644 index 0000000000..d32022aee9 --- /dev/null +++ b/docs/public/img/networks/8453.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23131446b6e0336a049682b8805a5b46ef0cc1ad43fa3ea83c2b94a399acd7be +size 16726 diff --git a/docs/public/img/relayer/contract_source.png b/docs/public/img/relayer/contract_source.png new file mode 100644 index 0000000000..0c08bbca05 --- /dev/null +++ b/docs/public/img/relayer/contract_source.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cda123644b6ee8f2cb8f34b168e2c7aa6f3483ffa6b50b44352b0f8e0bea5062 +size 102941 diff --git a/docs/public/img/relayer/contracts_page.png b/docs/public/img/relayer/contracts_page.png new file mode 100644 index 0000000000..755f56d9ee --- /dev/null +++ b/docs/public/img/relayer/contracts_page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd6dc7ee6d9dd703f4fc6d56ab6709b8fdd3f1f609b5fac6810ef26111cfe74f +size 248754 diff --git a/docs/public/img/relayer/deploy_contract_with_relayer.png b/docs/public/img/relayer/deploy_contract_with_relayer.png new file mode 100644 index 0000000000..59d5223238 --- /dev/null +++ b/docs/public/img/relayer/deploy_contract_with_relayer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:806b112e87d60635b7b1e7d255abfcdf730e3717891cb6c41dcfe86ba3ed2674 +size 97446 diff --git a/docs/public/img/relayer/ethauthproof_viewer_connect.png b/docs/public/img/relayer/ethauthproof_viewer_connect.png new file mode 100644 index 0000000000..21178e37f4 --- /dev/null +++ b/docs/public/img/relayer/ethauthproof_viewer_connect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6a755772ca73f17627574c2b76f9902d4e185427acc5d9f1de292c1c8e46eca +size 53674 diff --git a/docs/public/img/relayer/ethauthproof_viewer_copy.png b/docs/public/img/relayer/ethauthproof_viewer_copy.png new file mode 100644 index 0000000000..a04ee47c61 --- /dev/null +++ b/docs/public/img/relayer/ethauthproof_viewer_copy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32f66908b84b33959c9c28f4a80d6ce2f7edae6dc9c10944018fa1a2d742f80f +size 334517 diff --git a/docs/public/img/relayer/grant_role.png b/docs/public/img/relayer/grant_role.png new file mode 100644 index 0000000000..b9b2781ff7 --- /dev/null +++ b/docs/public/img/relayer/grant_role.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c8d45e3f9c2d91ead358521f02317a09f0c336ce44632220bf6a952910d880a +size 44145 diff --git a/docs/public/img/relayer/view_more_options.png b/docs/public/img/relayer/view_more_options.png new file mode 100644 index 0000000000..22182ead88 --- /dev/null +++ b/docs/public/img/relayer/view_more_options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f84ead98a5366717ce3f17af02f6ac1c311a98c2126ae3aa1ac8bc34b96ee542 +size 150878 diff --git a/docs/public/img/sequence-banner.jpeg b/docs/public/img/sequence-banner.jpeg new file mode 100644 index 0000000000..61e1bde97f --- /dev/null +++ b/docs/public/img/sequence-banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebdfe1f882e162514d751f484a222e33c1e0fcef42ae485cc4f75d4c3f9390f8 +size 666954 diff --git a/docs/public/img/sequence-composite-dark.svg b/docs/public/img/sequence-composite-dark.svg new file mode 100644 index 0000000000..30edf395cd --- /dev/null +++ b/docs/public/img/sequence-composite-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7da08810cbbadd2704f2429df907c56ead2f24681ac24a266e2c57717f5b346c +size 8899 diff --git a/docs/public/img/sequence-composite-light.svg b/docs/public/img/sequence-composite-light.svg new file mode 100644 index 0000000000..c314d16fea --- /dev/null +++ b/docs/public/img/sequence-composite-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:705aa92db4cc6f4cb606209ee8e02a1c74509b3e3b2f4fbaacab3764b2422d73 +size 8899 diff --git a/docs/public/img/sequence_fee_options.png b/docs/public/img/sequence_fee_options.png new file mode 100644 index 0000000000..792b03bbdf --- /dev/null +++ b/docs/public/img/sequence_fee_options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:608f6d54fc95ff62846cd69ce9504d2950c946a09c21c69233d528972d843efd +size 144734 diff --git a/docs/public/img/sequence_free_fee.png b/docs/public/img/sequence_free_fee.png new file mode 100644 index 0000000000..b20a28ec23 --- /dev/null +++ b/docs/public/img/sequence_free_fee.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8e31da82df9c407b98c9f3c359f896e1363c17c5b4130d86cf59e684218895d +size 72654 diff --git a/docs/public/img/sign-in-connect.png b/docs/public/img/sign-in-connect.png new file mode 100644 index 0000000000..7742914340 --- /dev/null +++ b/docs/public/img/sign-in-connect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ccafcd1a384e53f438df9559e9744650d71b3c474cec888436de4df3289f767 +size 668446 diff --git a/docs/public/img/sign-in-fresh.png b/docs/public/img/sign-in-fresh.png new file mode 100644 index 0000000000..3732d409a5 --- /dev/null +++ b/docs/public/img/sign-in-fresh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b3dc66c54dbc2562de327eb9369bbfd26a6970e8f05306a8d6e1931b38b533d +size 817276 diff --git a/docs/public/img/testnet-login.png b/docs/public/img/testnet-login.png new file mode 100644 index 0000000000..8116cdf469 --- /dev/null +++ b/docs/public/img/testnet-login.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc45d612a1289f689ca745ba1dd9cd20489ec5b975dd49dd7bb08dd93a04acb0 +size 66472 diff --git a/docs/public/img/unity/unity-import-setup.png b/docs/public/img/unity/unity-import-setup.png new file mode 100644 index 0000000000..02bc292181 --- /dev/null +++ b/docs/public/img/unity/unity-import-setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28301ac90ebcc9609d894351dcd144f0a4aa5022fb466abdf1cb4f2417a70a0d +size 100434 diff --git a/docs/public/img/unity/unity-import-tmpro.png b/docs/public/img/unity/unity-import-tmpro.png new file mode 100644 index 0000000000..26eb2ef1ed --- /dev/null +++ b/docs/public/img/unity/unity-import-tmpro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93927b0b2531a86a6c4db702ee6239f4dca8c327ec1381eaaaa4f8438a1fc5bb +size 31603 diff --git a/docs/public/img/unity/unity-package-manager-samples.png b/docs/public/img/unity/unity-package-manager-samples.png new file mode 100644 index 0000000000..da3df3791e --- /dev/null +++ b/docs/public/img/unity/unity-package-manager-samples.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d79fb5080b538df326fba2926250232f87c21003e978a3efa85f51714ff7f1d9 +size 112097 diff --git a/docs/public/img/unity/unity-prefab-in-canvas.png b/docs/public/img/unity/unity-prefab-in-canvas.png new file mode 100644 index 0000000000..3cddca0fcf --- /dev/null +++ b/docs/public/img/unity/unity-prefab-in-canvas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e92ee56f2d76da6021082a5f6a37a07c8a8a19e5be4f49bf518020b7ec8681c6 +size 23630 diff --git a/docs/public/img/unity/unity-prefab-inspector.png b/docs/public/img/unity/unity-prefab-inspector.png new file mode 100644 index 0000000000..2bcf813414 --- /dev/null +++ b/docs/public/img/unity/unity-prefab-inspector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a646092728a7f9ede04c905c82d0496d414ff198fa83d97f781e5b707bb05f9 +size 50365 diff --git a/docs/public/img/unity/unity-prefab.png b/docs/public/img/unity/unity-prefab.png new file mode 100644 index 0000000000..813d518b00 --- /dev/null +++ b/docs/public/img/unity/unity-prefab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e80d41117408cb570111c4b9bdfb113eed23420a508819e4caaf8e98bf47bcb7 +size 36075 diff --git a/docs/public/img/unity/unity-troubleshooting-1.png b/docs/public/img/unity/unity-troubleshooting-1.png new file mode 100644 index 0000000000..49d989e712 --- /dev/null +++ b/docs/public/img/unity/unity-troubleshooting-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d09bad255820f174e8629e9ea97221361509dc5d9f9939ef58d0048c8c974530 +size 36584 diff --git a/docs/public/img/unity/unity-troubleshooting-2.png b/docs/public/img/unity/unity-troubleshooting-2.png new file mode 100644 index 0000000000..bcda9098a2 --- /dev/null +++ b/docs/public/img/unity/unity-troubleshooting-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a040712ca1e728a8fd1635ce41f3e5266d6957c395b615e24cde14a9b662654 +size 28342 diff --git a/docs/public/img/unity/unity-update-api-prompt.png b/docs/public/img/unity/unity-update-api-prompt.png new file mode 100644 index 0000000000..c5e9cd320a --- /dev/null +++ b/docs/public/img/unity/unity-update-api-prompt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edfac81b2603b1d63fb1079ba1e2fdbe8cb2364c7641001cc87aff730c6bc0ba +size 58563 diff --git a/docs/public/img/unity/unity-url-scheme-ios.png b/docs/public/img/unity/unity-url-scheme-ios.png new file mode 100644 index 0000000000..1392cd2873 --- /dev/null +++ b/docs/public/img/unity/unity-url-scheme-ios.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66411b72ef75a995301def90387e0517448b72556be721c61469a4090231c791 +size 104123 diff --git a/docs/public/img/unity/unity-url-scheme-mac.png b/docs/public/img/unity/unity-url-scheme-mac.png new file mode 100644 index 0000000000..3b012772c9 --- /dev/null +++ b/docs/public/img/unity/unity-url-scheme-mac.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0c458de191debea881ece22815e941ba9a29a50b3ad23e38966ea77d487d655 +size 98697 diff --git a/docs/public/img/wallet-screen.png b/docs/public/img/wallet-screen.png new file mode 100644 index 0000000000..0c97c4648c --- /dev/null +++ b/docs/public/img/wallet-screen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5955dd6fac2059caa93c32bf3d600c18c543902e564bee4ec6cf88d8cbc713c +size 893600 diff --git a/docs/public/img/walletconnect/activity.png b/docs/public/img/walletconnect/activity.png new file mode 100644 index 0000000000..f2e2c92f25 --- /dev/null +++ b/docs/public/img/walletconnect/activity.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fce0e3414ceecd147b51904ede7a33d38d54a1c70986791e42132874e5f91b50 +size 115230 diff --git a/docs/public/img/walletconnect/confirm.png b/docs/public/img/walletconnect/confirm.png new file mode 100644 index 0000000000..e3ea5c69d7 --- /dev/null +++ b/docs/public/img/walletconnect/confirm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c4e397fe47f824dbb53f2962dd6f29e01e604a2d17feefe6cc979f1c62cbaa8 +size 51827 diff --git a/docs/public/img/walletconnect/connect-wallet.png b/docs/public/img/walletconnect/connect-wallet.png new file mode 100644 index 0000000000..911b88e07c --- /dev/null +++ b/docs/public/img/walletconnect/connect-wallet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02429d572b346429ecd7d66f74684eb91af510d2defa69e74bcf62f5e7e58517 +size 134678 diff --git a/docs/public/img/walletconnect/disconnect.png b/docs/public/img/walletconnect/disconnect.png new file mode 100644 index 0000000000..9f1987b477 --- /dev/null +++ b/docs/public/img/walletconnect/disconnect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37c75e4199b2ca7ce0bb8c030d6895ab7caeed9a4bf4d84a230231ddd0be2bc8 +size 146484 diff --git a/docs/public/img/walletconnect/qr-code.png b/docs/public/img/walletconnect/qr-code.png new file mode 100644 index 0000000000..bc542c2dd5 --- /dev/null +++ b/docs/public/img/walletconnect/qr-code.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0ea9fd8af015ac8eadd7567872c9643262f9fea893d4a167f5c46e703ed01b +size 369606 diff --git a/docs/public/img/walletconnect/scan-qr-code.png b/docs/public/img/walletconnect/scan-qr-code.png new file mode 100644 index 0000000000..e40556b776 --- /dev/null +++ b/docs/public/img/walletconnect/scan-qr-code.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45ed28f1917a7df22946410933fe1d28910383025996c450a0d6983cd6757a37 +size 144166 diff --git a/docs/public/img/walletconnect/scan.png b/docs/public/img/walletconnect/scan.png new file mode 100644 index 0000000000..aca8b90b54 --- /dev/null +++ b/docs/public/img/walletconnect/scan.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f7af1874605d8957e5856a803b3a00bcc0d9a007c66f9b9313cde3626a341de +size 39973 diff --git a/docs/public/img/walletconnect/select-walletconnect.png b/docs/public/img/walletconnect/select-walletconnect.png new file mode 100644 index 0000000000..e0d704277a --- /dev/null +++ b/docs/public/img/walletconnect/select-walletconnect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82434cab9241ee469b64419b0ffe0d3fc06628832a5ec4f3227408ef0362257c +size 161813 diff --git a/docs/public/img/walletconnect/success.png b/docs/public/img/walletconnect/success.png new file mode 100644 index 0000000000..00022c40e5 --- /dev/null +++ b/docs/public/img/walletconnect/success.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:530220b2b58d4195ef35b16e2ea46a5178870e80d36948d57b5420035ae3d9a1 +size 103657 diff --git a/docs/public/img/walletconnect/wallet-connect-scan.png b/docs/public/img/walletconnect/wallet-connect-scan.png new file mode 100644 index 0000000000..ff6a4a7735 --- /dev/null +++ b/docs/public/img/walletconnect/wallet-connect-scan.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20cf96588cdb1a6a689edc81d1a9e2014395f19cc4b9a0b2d9d6869f9d966050 +size 29854 diff --git a/docs/public/img/web3modal.png b/docs/public/img/web3modal.png new file mode 100644 index 0000000000..7ad19445e9 --- /dev/null +++ b/docs/public/img/web3modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95de3bda184c50061c444fb51bfa96371191a46f563e6b49cb165d478131cd5b +size 120341 diff --git a/docs/public/imgs/sequence-composite-dark.svg b/docs/public/imgs/sequence-composite-dark.svg deleted file mode 100644 index ec0a342a9c..0000000000 --- a/docs/public/imgs/sequence-composite-dark.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/public/imgs/sequence-composite-light.svg b/docs/public/imgs/sequence-composite-light.svg deleted file mode 100644 index 159725aef1..0000000000 --- a/docs/public/imgs/sequence-composite-light.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/public/video/builder/01_Intro.mp4 b/docs/public/video/builder/01_Intro.mp4 new file mode 100644 index 0000000000..5f18de66fd --- /dev/null +++ b/docs/public/video/builder/01_Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:447938c0089330da3ba1ec89d29341e7ae2061e51f726002c1895ce714197923 +size 32464163 diff --git a/docs/public/video/builder/02_Project_Management.mp4 b/docs/public/video/builder/02_Project_Management.mp4 new file mode 100644 index 0000000000..bb4837fc40 --- /dev/null +++ b/docs/public/video/builder/02_Project_Management.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ae848622a2ebcfc01834612482c6fec5b2cde4bb2c644f664cfe375a9e23293 +size 4365841 diff --git a/docs/public/video/builder/03_Contracts.mp4 b/docs/public/video/builder/03_Contracts.mp4 new file mode 100644 index 0000000000..5934b667ca --- /dev/null +++ b/docs/public/video/builder/03_Contracts.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ee9aff95b4ff48d77a37c00ec4a4184a0f3fe92f2815b53f4b2e647cab87381 +size 3697045 diff --git a/docs/public/video/builder/04_Sequence_Kit.mp4 b/docs/public/video/builder/04_Sequence_Kit.mp4 new file mode 100644 index 0000000000..f5561176a7 --- /dev/null +++ b/docs/public/video/builder/04_Sequence_Kit.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85fc96f61a1735143c524d1c85e2ceadbb3f022ee6bf27ec1b2b576824b98caa +size 23509268 diff --git a/docs/public/video/builder/05_Gas_Tank.mp4 b/docs/public/video/builder/05_Gas_Tank.mp4 new file mode 100644 index 0000000000..76bbcd2af1 --- /dev/null +++ b/docs/public/video/builder/05_Gas_Tank.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e72b0c0840c0eb953ddbc8e571e00116c5393009ca5dbef8b2a8951b02f7df2b +size 1404398 diff --git a/docs/public/video/builder/06_Node_Gateway.mp4 b/docs/public/video/builder/06_Node_Gateway.mp4 new file mode 100644 index 0000000000..f56f6a0ac0 --- /dev/null +++ b/docs/public/video/builder/06_Node_Gateway.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9ab1042694d09841174c83baf7237d13ece11e50bf4ea1ee35d5e7658e9cfc2 +size 4831405 diff --git a/docs/public/video/builder/07_Marketplace.mp4 b/docs/public/video/builder/07_Marketplace.mp4 new file mode 100644 index 0000000000..97a2cdddad --- /dev/null +++ b/docs/public/video/builder/07_Marketplace.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aec9a3120f84339b0ef4d551bd80a1b2cab0fe4ae9a8cee5802283eab2a788c8 +size 7108327 diff --git a/docs/public/video/builder/08_Indexer.mp4 b/docs/public/video/builder/08_Indexer.mp4 new file mode 100644 index 0000000000..6d8392788a --- /dev/null +++ b/docs/public/video/builder/08_Indexer.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc08a0dce6a22500fec2b30b5468cdd09b405f56a54dd618d914229a2582da4d +size 5592328 diff --git a/docs/public/video/builder/09_Collaborations.mp4 b/docs/public/video/builder/09_Collaborations.mp4 new file mode 100644 index 0000000000..1a11e1971d --- /dev/null +++ b/docs/public/video/builder/09_Collaborations.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd66f84d4398c8badf662c9e9281c0ceb91b6de377ac0bd56a5ba73425418180 +size 4170091 diff --git a/nav.ts b/nav.ts index cbe1c529bc..72e63aa21a 100644 --- a/nav.ts +++ b/nav.ts @@ -21,17 +21,17 @@ export const topNav = [ { text: 'Web3 Game with WebGL', link: '/guides/webgl-guide', match: '/guides/webgl-guide' }, { text: 'Web3 Game with Unity', link: '/guides/unity-guide', match: '/guides/unity-guide' }, { text: 'Lootboxes', link: '/guides/lootbox', match: '/guides/lootbox' }, - { text: 'Custom Marketplace', link: '/guides/template-marketplace-api', match: '/guides/template-marketplace-api' } + { text: 'Custom Marketplace', link: '/guides/templates/template-marketplace-api', match: '/guides/templates/template-marketplace-api' } ] }, { text: 'SDKs', items: [ - { text: 'Unity', link: '/sdk/unity', match: '/sdk/unity' }, + { text: 'Unity', link: '/sdk/unity/01-overview', match: '/sdk/unity/01-overview' }, { text: 'Unreal', link: '/sdk/unreal', match: '/sdk/unreal' }, { text: 'Node.js', link: '/sdk/nodejs', match: '/sdk/nodejs' }, - { text: 'Sequence Kit', link: '/sdk/sequence-kit', match: '/sdk/sequence-kit' }, - { text: 'Go', link: '/sdk/go', match: '/sdk/go' }, + { text: 'Sequence Kit', link: '/sdk/sequence-kit/01-overview', match: '/sdk/sequence-kit/01-overview' }, + { text: 'Go', link: '/sdk/go/go', match: '/sdk/go/overview' }, { text: 'Android', link: '/sdk/android', match: '/sdk/android' }, { text: 'React Native', link: '/sdk/reactnative', match: '/sdk/reactnative' }, { text: 'iOS', link: '/sdk/iOS', match: '/sdk/iOS' } @@ -214,8 +214,8 @@ export const sidebar = { text: 'Templates', items: [ { text: 'Embedded Wallet Demo', link: '/guides/templates/template-embedded-wallet' }, - { text: 'Go Relayer', link: '/guides/templates/template-go-relayer' }, - { text: 'Serverless Relayer using Cloudflare', link: '/guides/templates/template-cloudflare-relayer' }, + { text: 'Building Backend Relaying Server', link: '/guides/templates/02-building-relaying-server' }, + { text: 'Serverless Minting of Collectibles', link: '/guides/templates/03-mint-collectibles-serverless' }, { text: 'Marketplace API Demo', link: '/guides/templates/template-marketplace-api' } ] } @@ -228,25 +228,78 @@ export const sidebar = { // collapsed: true, items: [ { text: 'Unreal', link: '/sdk/unreal' }, - { text: 'Unity', link: '/sdk/unity' } + { text: 'Unity', collapsed: true, items: [ + { text: 'Overview', link: '/sdk/unity/01-overview' }, + { text: 'Installation', link: '/sdk/unity/02-installation' }, + { text: 'Setup', link: '/sdk/unity/03-setup' }, + { text: 'Authentication', link: '/sdk/unity/04-authentication' }, + { text: 'Write to blockchain', link: '/sdk/unity/05-write-to-blockchain' }, + { text: 'Read from Blockchain', link: '/sdk/unity/06-read-from-blockchain' }, + { text: 'Sign Messages', link: '/sdk/unity/07-sign-messages' }, + { text: 'Deploy Contracts', link: '/sdk/unity/08-deploy-contracts' }, + { text: 'Wallet UI', link: '/sdk/unity/09-wallet-ui' }, + { text: 'Advanced', collapsed: true, items: [ + { text: 'Introduction', link: '/sdk/unity/Advanced/01-introduction' }, + { text: 'Wallets', link: '/sdk/unity/Advanced/02-wallets' }, + { text: 'Clients', link: '/sdk/unity/Advanced/03-clients' }, + { text: 'Transfers', link: '/sdk/unity/Advanced/04-transfers' }, + { text: 'Contracts', link: '/sdk/unity/Advanced/05-contracts' }, + { text: 'Tokens', link: '/sdk/unity/Advanced/06-tokens' } + ] + }, + ] + } ] }, { text: 'Mobile', - // collapsed: true, items: [ { text: 'Android', link: '/sdk/android' }, { text: 'iOS', link: '/sdk/iOS' }, { text: 'React Native', link: '/sdk/react-native' } ] }, + { text: 'Web3', - // collapsed: true, items: [ - { text: 'SequenceKit', link: '/sdks/sequence-kit' }, - { text: 'TypeScript', link: '/sdk/typescript' }, - { text: 'Go', link: '/sdk/go' } + { text: 'SequenceKit', collapsed: true, items: [ + { text: 'Overview', link: '/sdk/sequence-kit/01-overview' }, + { text: 'Quickstart', link: '/sdk/sequence-kit/02-getting-started' }, + { text: 'Configuration', link: '/sdk/sequence-kit/03-configuration' }, + { text: 'Checkout', link: '/sdk/sequence-kit/04-checkout' }, + { text: 'Custom Connectors', link: '/sdk/sequence-kit/05-custom-connectors' } + ] + }, + + { text: 'TypeScript', collapsed: true, items: [ + {text: 'Connect Wallet', link: '/sdk/typescript/03-guides/01-connect-wallet'}, + {text: 'Authenticate Users with Message Signature', link: '/sdk/typescript/03-guides/02-auth-address'}, + {text: 'Signing & Verifying Messages', link: '/sdk/typescript/03-guides/03-sign-message'}, + {text: 'No-wallet confirmation signatures', link: '/sdk/typescript/03-guides/04-session-keys'}, + {text: 'Sending Transactions', link: '/sdk/typescript/03-guides/05-send-transaction'}, + {text: 'Sending ERC-20 Tokens', link: '/sdk/typescript/03-guides/06-send-erc20'}, + {text: 'Sending ERC-721 (NFT) Tokens', link: '/sdk/typescript/03-guides/07-send-erc721'}, + {text: 'Sending ERC-1155 (Collectible) Tokens', link: '/sdk/typescript/03-guides/08-send-erc1155'}, + {text: 'Sending a Batch of Transactions', link: '/sdk/typescript/03-guides/09-send-batch-transactions'}, + {text: 'Building Backends with Sequence', link: '/sdk/typescript/03-guides/10-building-backends'}, + {text: 'Wallet Connectors', items: [ + {text: 'Overview', link: '/sdk/typescript/03-guides/connectors/01-overview'}, + {text: 'SequenceKit', link: '/sdk/sequence-kit/01-overview'}, + {text: 'Wagmi', link: '/sdk/typescript/03-guides/connectors/03-wagmi'}, + {text: 'RainbowKit', link: '/sdk/typescript/03-guides/connectors/04-rainbow-kit'}, + {text: 'Web3 Onboard', link: '/sdk/typescript/03-guides/connectors/05-web3-onboard'}, + {text: 'Web3 React V6', link: '/sdk/typescript/03-guides/connectors/06-web3-react-v6'}, + {text: 'Web3Modal', link: '/sdk/typescript/03-guides/connectors/07-web3modal'}, + {text: 'FAQ', link: '/sdk/typescript/03-guides/connectors/08-FAQ'}, + ] + } + ] + }, + { text: 'Go', collapsed: true, items: [ + {text: 'Overview', link: '/sdk/go/overview'},] + + } ] }, { diff --git a/vocs.config.tsx b/vocs.config.tsx index 7cd3986238..244e48028f 100644 --- a/vocs.config.tsx +++ b/vocs.config.tsx @@ -12,7 +12,7 @@ export default defineConfig({ // 'https://vocs.dev/api/og?logo=%logo&title=%title&description=%description', // }, // iconUrl: { light: '/favicons/light.png', dark: '/favicons/dark.png' }, - logoUrl: { light: '/imgs/sequence-composite-light.svg', dark: '/imgs/sequence-composite-dark.svg' }, + logoUrl: { light: '/img/sequence-composite-light.svg', dark: '/img/sequence-composite-dark.svg' }, // rootDir: '.', basePath: '/',