From ac4911e3664e685d1b656d98b92f6d865dfc3fed Mon Sep 17 00:00:00 2001 From: samuelea Date: Sat, 29 Nov 2025 14:38:40 -0500 Subject: [PATCH 01/12] forteConfig documentation --- .../hooks/useSelectPaymentModal.mdx | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx b/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx index 0b663d1f..176b1ada 100644 --- a/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx +++ b/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx @@ -176,6 +176,58 @@ The `settings` object can include the following properties: | `onError` | `(error: Error) => void` | Callback when an error occurs | | `onClose` | `() => void` | Callback when the modal is closed | | `txData` | `string` | Encoded transaction data for the purchase | +| `forteConfig` | `object` | Forte configuration | + +#### forteConfig + +The forteConfig object must be provided to enable Forte payments. + +The protocol must be set to either `custom_evm_call` and or `mint` depending on whether the transaction is a mint or a general transaction. +Furthermore, a `sellerAddress` string must be provided, indicating the address of the seller in the case of a transaction or the address of the contract in the case of a mint + +The calldata can be either string with the calldata (the same as the `txData` already provided) or a structured calldata object, detailing the function name and the arguments. Crucially, the structured calldata requires a receiver address to be specified as shown in the example below. + +```tsx +const structuredCalldata = { + functionName: 'mint', + arguments: [ + { + type: 'address', + value: '${receiver_address}' // The address of the receiver of the minted NFTs + }, + { + type: 'uint256[]', + value: ['1'] + }, + { + type: 'uint256[]', + value: ['1'] + }, + { + type: 'bytes', + value: toHex(0) + }, + { + type: 'address', + value: currencyAddress + }, + { + type: 'uint256', + value: price + }, + { + type: 'bytes32[]', + value: [toHex(0, { size: 32 })] + } + ] +} + +forteConfig: { + protocol: 'custom_evm_call', + calldata: structuredCalldata, + sellerAddress: '0x184D4F89ad34bb0491563787ca28118273402986' +} +``` #### closeSelectPaymentModal From 886512f488205f13715374ea604dc441c8d5a344 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 29 Nov 2025 19:40:08 +0000 Subject: [PATCH 02/12] chore(i18n): update translations [en] Sync file structure, format locales. Branch: 199/merge --- .../hooks/useSelectPaymentModal.mdx | 51 +++++++++++++++++++ .../hooks/useSelectPaymentModal.mdx | 51 +++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/es/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx b/es/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx index 884a0e78..a6f9a462 100644 --- a/es/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx +++ b/es/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx @@ -173,6 +173,57 @@ El objeto `settings` puede incluir las siguientes propiedades: | `onError` | `(error: Error) => void` | Callback cuando ocurre un error | | `onClose` | `() => void` | Callback cuando se cierra el modal | | `txData` | `string` | Datos de transacción codificados para la compra | +| `forteConfig` | `object` | Configuración de Forte | + +#### forteConfig +Se debe proporcionar el objeto forteConfig para habilitar los pagos con Forte. + +El protocolo debe establecerse como `custom_evm_call` o `mint`, según si la transacción es un minteo o una transacción general. +Además, se debe proporcionar una cadena `sellerAddress`, que indica la dirección del vendedor en el caso de una transacción o la dirección del contrato en el caso de un minteo. + +El calldata puede ser una cadena con el calldata (igual que el `txData` ya proporcionado) o un objeto calldata estructurado, que detalla el nombre de la función y los argumentos. Es fundamental que el calldata estructurado incluya una dirección de receptor, como se muestra en el siguiente ejemplo. + +```tsx +const structuredCalldata = { + functionName: 'mint', + arguments: [ + { + type: 'address', + value: '${receiver_address}' // The address of the receiver of the minted NFTs + }, + { + type: 'uint256[]', + value: ['1'] + }, + { + type: 'uint256[]', + value: ['1'] + }, + { + type: 'bytes', + value: toHex(0) + }, + { + type: 'address', + value: currencyAddress + }, + { + type: 'uint256', + value: price + }, + { + type: 'bytes32[]', + value: [toHex(0, { size: 32 })] + } + ] +} + +forteConfig: { + protocol: 'custom_evm_call', + calldata: structuredCalldata, + sellerAddress: '0x184D4F89ad34bb0491563787ca28118273402986' +} +``` #### closeSelectPaymentModal `() => void` diff --git a/ja/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx b/ja/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx index 1861fab2..b3df215d 100644 --- a/ja/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx +++ b/ja/sdk/web/checkout-sdk/hooks/useSelectPaymentModal.mdx @@ -173,6 +173,57 @@ type UseSelectPaymentModalReturnType = { | `onError` | `(error: Error) => void` | エラー発生時のコールバック | | `onClose` | `() => void` | モーダルが閉じられたときのコールバック | | `txData` | `string` | 購入用のエンコード済みトランザクションデータ | +| `forteConfig` | `object` | Forteの設定 | + +#### forteConfig +Forte決済を有効にするには、forteConfigオブジェクトを指定する必要があります。 + +プロトコルは、取引がミントか一般的な取引かに応じて、`custom_evm_call` または `mint` のいずれかに設定してください。 +また、取引の場合は販売者のアドレス、ミントの場合はコントラクトのアドレスを示す `sellerAddress` 文字列を必ず指定してください。 + +calldataは、(すでに提供されている `txData` と同じ)calldataの文字列、または関数名と引数を詳細に記述した構造化calldataオブジェクトのいずれかを指定できます。特に、構造化calldataの場合は、下記の例のように受取人アドレスを指定する必要があります。 + +```tsx +const structuredCalldata = { + functionName: 'mint', + arguments: [ + { + type: 'address', + value: '${receiver_address}' // The address of the receiver of the minted NFTs + }, + { + type: 'uint256[]', + value: ['1'] + }, + { + type: 'uint256[]', + value: ['1'] + }, + { + type: 'bytes', + value: toHex(0) + }, + { + type: 'address', + value: currencyAddress + }, + { + type: 'uint256', + value: price + }, + { + type: 'bytes32[]', + value: [toHex(0, { size: 32 })] + } + ] +} + +forteConfig: { + protocol: 'custom_evm_call', + calldata: structuredCalldata, + sellerAddress: '0x184D4F89ad34bb0491563787ca28118273402986' +} +``` #### closeSelectPaymentModal `() => void` From 315295f6176029104a36bb19062383a4ccae4433 Mon Sep 17 00:00:00 2001 From: 0xsequence-bot <50996415+0xsequence-bot@users.noreply.github.com> Date: Tue, 2 Dec 2025 05:57:09 -0500 Subject: [PATCH 03/12] [AUTOMATED] Update stack/api OpenAPI docs (#84) * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * [AUTOMATED] Update: api/proto/docs/api.gen.yaml * Auto-update guide cards metadata [skip ci] --------- Co-authored-by: pkieltyka <18831+pkieltyka@users.noreply.github.com> Co-authored-by: taylanpince <12650+taylanpince@users.noreply.github.com> Co-authored-by: david-littlefarmer <17728576+david-littlefarmer@users.noreply.github.com> Co-authored-by: nachopiris <66640666+nachopiris@users.noreply.github.com> Co-authored-by: SamueleA <26363061+SamueleA@users.noreply.github.com> Co-authored-by: VojtechVitek <139342+VojtechVitek@users.noreply.github.com> Co-authored-by: shunkakinoki <39187513+shunkakinoki@users.noreply.github.com> Co-authored-by: github-actions[bot] --- docs/pages/api/api/api.gen.yaml | 3979 +++++++++++++++++++++++++++++++ guides/guide-cards.json | 4 +- 2 files changed, 3981 insertions(+), 2 deletions(-) create mode 100644 docs/pages/api/api/api.gen.yaml diff --git a/docs/pages/api/api/api.gen.yaml b/docs/pages/api/api/api.gen.yaml new file mode 100644 index 00000000..4458a4d9 --- /dev/null +++ b/docs/pages/api/api/api.gen.yaml @@ -0,0 +1,3979 @@ +# sequence-api v0.4.0 4d5fad1e2ba72d78a45fdbafbf060cdd748c8eba +# -- +# Code generated by webrpc-gen@v0.31.0 with openapi generator; DO NOT EDIT +# +# webrpc-gen -service=API -match=@public -schema=proto/api.ridl -target=openapi -title=Sequence Api -servers=https://api.sequence.app/;Api -securityAnnotation=@auth -securitySchemes={ 'ApiKeyAuth': { 'type': 'apiKey', 'in': 'header', 'description': 'Project access key for authenticating requests, get an access key at https://sequence.build', 'name': 'X-Access-Key' }, } -out=proto/docs/api.gen.yaml +openapi: 3.0.0 +info: + title: 'Sequence Api' + version: '' +servers: + - url: 'https://api.sequence.app/' + description: 'Api' +components: + securitySchemes: {'ApiKeyAuth': {'type': 'apiKey', 'in': 'header', 'description': 'Project access key for authenticating requests, get an access key at https://sequence.build', 'name': 'X-Access-Key'}} + schemas: + ErrorWebrpcEndpoint: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcEndpoint" + code: + type: number + example: 0 + msg: + type: string + example: "endpoint error" + cause: + type: string + status: + type: number + example: 400 + ErrorWebrpcRequestFailed: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcRequestFailed" + code: + type: number + example: -1 + msg: + type: string + example: "request failed" + cause: + type: string + status: + type: number + example: 400 + ErrorWebrpcBadRoute: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcBadRoute" + code: + type: number + example: -2 + msg: + type: string + example: "bad route" + cause: + type: string + status: + type: number + example: 404 + ErrorWebrpcBadMethod: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcBadMethod" + code: + type: number + example: -3 + msg: + type: string + example: "bad method" + cause: + type: string + status: + type: number + example: 405 + ErrorWebrpcBadRequest: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcBadRequest" + code: + type: number + example: -4 + msg: + type: string + example: "bad request" + cause: + type: string + status: + type: number + example: 400 + ErrorWebrpcBadResponse: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcBadResponse" + code: + type: number + example: -5 + msg: + type: string + example: "bad response" + cause: + type: string + status: + type: number + example: 500 + ErrorWebrpcServerPanic: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcServerPanic" + code: + type: number + example: -6 + msg: + type: string + example: "server panic" + cause: + type: string + status: + type: number + example: 500 + ErrorWebrpcInternalError: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcInternalError" + code: + type: number + example: -7 + msg: + type: string + example: "internal error" + cause: + type: string + status: + type: number + example: 500 + ErrorWebrpcClientAborted: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcClientAborted" + code: + type: number + example: -8 + msg: + type: string + example: "request aborted by client" + cause: + type: string + status: + type: number + example: 400 + ErrorWebrpcStreamLost: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcStreamLost" + code: + type: number + example: -9 + msg: + type: string + example: "stream lost" + cause: + type: string + status: + type: number + example: 400 + ErrorWebrpcStreamFinished: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "WebrpcStreamFinished" + code: + type: number + example: -10 + msg: + type: string + example: "stream finished" + cause: + type: string + status: + type: number + example: 200 + ErrorUnauthorized: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "Unauthorized" + code: + type: number + example: 1000 + msg: + type: string + example: "Unauthorized access" + cause: + type: string + status: + type: number + example: 401 + ErrorPermissionDenied: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "PermissionDenied" + code: + type: number + example: 1001 + msg: + type: string + example: "Permission denied" + cause: + type: string + status: + type: number + example: 403 + ErrorSessionExpired: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "SessionExpired" + code: + type: number + example: 1002 + msg: + type: string + example: "Session expired" + cause: + type: string + status: + type: number + example: 403 + ErrorMethodNotFound: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "MethodNotFound" + code: + type: number + example: 1003 + msg: + type: string + example: "Method not found" + cause: + type: string + status: + type: number + example: 404 + ErrorRequestConflict: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "RequestConflict" + code: + type: number + example: 1004 + msg: + type: string + example: "Conflict with target resource" + cause: + type: string + status: + type: number + example: 409 + ErrorAborted: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "Aborted" + code: + type: number + example: 1005 + msg: + type: string + example: "Request aborted" + cause: + type: string + status: + type: number + example: 400 + ErrorGeoblocked: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "Geoblocked" + code: + type: number + example: 1006 + msg: + type: string + example: "Geoblocked region" + cause: + type: string + status: + type: number + example: 451 + ErrorRateLimited: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "RateLimited" + code: + type: number + example: 1007 + msg: + type: string + example: "Rate-limited. Please slow down." + cause: + type: string + status: + type: number + example: 429 + ErrorProjectNotFound: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "ProjectNotFound" + code: + type: number + example: 1008 + msg: + type: string + example: "Project not found" + cause: + type: string + status: + type: number + example: 401 + ErrorAccessKeyNotFound: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "AccessKeyNotFound" + code: + type: number + example: 1101 + msg: + type: string + example: "Access key not found" + cause: + type: string + status: + type: number + example: 401 + ErrorAccessKeyMismatch: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "AccessKeyMismatch" + code: + type: number + example: 1102 + msg: + type: string + example: "Access key mismatch" + cause: + type: string + status: + type: number + example: 409 + ErrorInvalidOrigin: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "InvalidOrigin" + code: + type: number + example: 1103 + msg: + type: string + example: "Invalid origin for Access Key" + cause: + type: string + status: + type: number + example: 403 + ErrorInvalidService: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "InvalidService" + code: + type: number + example: 1104 + msg: + type: string + example: "Service not enabled for Access key" + cause: + type: string + status: + type: number + example: 403 + ErrorUnauthorizedUser: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "UnauthorizedUser" + code: + type: number + example: 1105 + msg: + type: string + example: "Unauthorized user" + cause: + type: string + status: + type: number + example: 403 + ErrorQuotaExceeded: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "QuotaExceeded" + code: + type: number + example: 1200 + msg: + type: string + example: "Quota request exceeded" + cause: + type: string + status: + type: number + example: 429 + ErrorQuotaRateLimit: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "QuotaRateLimit" + code: + type: number + example: 1201 + msg: + type: string + example: "Quota rate limit exceeded" + cause: + type: string + status: + type: number + example: 429 + ErrorNoDefaultKey: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "NoDefaultKey" + code: + type: number + example: 1300 + msg: + type: string + example: "No default access key found" + cause: + type: string + status: + type: number + example: 403 + ErrorMaxAccessKeys: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "MaxAccessKeys" + code: + type: number + example: 1301 + msg: + type: string + example: "Access keys limit reached" + cause: + type: string + status: + type: number + example: 403 + ErrorAtLeastOneKey: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "AtLeastOneKey" + code: + type: number + example: 1302 + msg: + type: string + example: "You need at least one Access Key" + cause: + type: string + status: + type: number + example: 403 + ErrorTimeout: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "Timeout" + code: + type: number + example: 1900 + msg: + type: string + example: "Request timed out" + cause: + type: string + status: + type: number + example: 408 + ErrorInvalidArgument: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "InvalidArgument" + code: + type: number + example: 2000 + msg: + type: string + example: "Invalid argument" + cause: + type: string + status: + type: number + example: 400 + ErrorUnavailable: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "Unavailable" + code: + type: number + example: 2002 + msg: + type: string + example: "Unavailable resource" + cause: + type: string + status: + type: number + example: 400 + ErrorQueryFailed: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "QueryFailed" + code: + type: number + example: 2003 + msg: + type: string + example: "Query failed" + cause: + type: string + status: + type: number + example: 400 + ErrorNotFound: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "NotFound" + code: + type: number + example: 3000 + msg: + type: string + example: "Resource not found" + cause: + type: string + status: + type: number + example: 400 + ErrorUnsupportedNetwork: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "UnsupportedNetwork" + code: + type: number + example: 3008 + msg: + type: string + example: "Unsupported network" + cause: + type: string + status: + type: number + example: 422 + SortOrder: + type: string + description: Represented as uint32 on the server side + enum: + - DESC + - ASC + GetLifiSwapRouteDirection: + type: string + description: Represented as uint8 on the server side + enum: + - to + - from + TokenType: + type: string + description: Represented as uint8 on the server side + enum: + - ERC20 + - ERC721 + - ERC1155 + TransakBuySell: + type: string + description: Represented as uint8 on the server side + enum: + - UNKNOWN + - BUY + - SELL + TradeType: + type: string + description: Represented as string on the server side + enum: + - EXACT_INPUT + - EXACT_OUTPUT + CheckoutOptionCrypto: + type: string + description: Represented as uint32 on the server side + enum: + - none + - partially + - all + CheckoutOptionNFTCheckoutProvider: + type: string + description: Represented as uint32 on the server side + enum: + - unknown + - transak + CheckoutOptionOnRampProvider: + type: string + description: Represented as uint32 on the server side + enum: + - unknown + - transak + CheckoutOptionSwapProvider: + type: string + description: Represented as uint32 on the server side + enum: + - unknown + - lifi + Version: + type: object + required: + - webrpcVersion + - schemaVersion + - schemaHash + - appVersion + properties: + webrpcVersion: + type: string + schemaVersion: + type: string + schemaHash: + type: string + appVersion: + type: string + RuntimeStatus: + type: object + required: + - healthOK + - startTime + - uptime + - ver + - branch + - commitHash + - checks + - numTxnsRelayed + properties: + healthOK: + type: boolean + startTime: + type: string + uptime: + type: number + ver: + type: string + branch: + type: string + commitHash: + type: string + checks: + $ref: '#/components/schemas/RuntimeChecks' + numTxnsRelayed: + type: object + description: 'map' + additionalProperties: + $ref: '#/components/schemas/NumTxnsRelayed' + NumTxnsRelayed: + type: object + required: + - chainID + - prev + - current + - period + properties: + chainID: + type: number + prev: + type: number + current: + type: number + period: + type: number + RuntimeChecks: + type: object + SequenceContext: + type: object + required: + - factory + - mainModule + - mainModuleUpgradable + - guestModule + - utils + properties: + factory: + type: string + mainModule: + type: string + mainModuleUpgradable: + type: string + guestModule: + type: string + utils: + type: string + PublicKey: + type: object + required: + - id + - x + - y + properties: + id: + type: string + x: + type: string + y: + type: string + User: + type: object + required: + - address + - username + - normalizedUsername + - avatar + - bio + - location + - locale + - sysAdmin + properties: + address: + type: string + username: + type: string + normalizedUsername: + type: string + avatar: + type: string + bio: + type: string + location: + type: string + locale: + type: string + backup: + type: boolean + backupConfirmed: + type: boolean + maxInvites: + type: number + updatedAt: + type: string + createdAt: + type: string + sysAdmin: + type: boolean + WalletBackup: + type: object + required: + - accountAddress + - secretHash + - encryptedWallet + - userConfirmed + properties: + accountAddress: + type: string + secretHash: + type: string + encryptedWallet: + type: string + userConfirmed: + type: boolean + updatedAt: + type: string + createdAt: + type: string + Friend: + type: object + required: + - id + - userAddress + - friendAddress + - nickname + properties: + id: + type: number + userAddress: + type: string + friendAddress: + type: string + nickname: + type: string + user: + $ref: '#/components/schemas/User' + createdAt: + type: string + MetaTxn: + type: object + required: + - id + - chainId + - walletAddress + - contract + - input + properties: + id: + type: string + chainId: + type: string + walletAddress: + type: string + contract: + type: string + input: + type: string + Call: + type: object + required: + - to + properties: + to: + type: string + value: + type: string + data: + type: string + gasLimit: + type: string + delegateCall: + type: boolean + onlyFallback: + type: boolean + behaviorOnError: + type: number + IntentCallsPayload: + type: object + required: + - chainId + - calls + properties: + chainId: + type: string + space: + type: string + nonce: + type: string + calls: + type: array + description: '[]Call' + items: + $ref: '#/components/schemas/Call' + IntentConfig: + type: object + required: + - id + - configHash + - originIntentAddress + - destinationIntentAddress + - mainSigner + - calls + - preconditions + properties: + id: + type: number + configHash: + type: string + originIntentAddress: + type: string + destinationIntentAddress: + type: string + mainSigner: + type: string + calls: + type: array + description: '[]IntentCallsPayload' + items: + $ref: '#/components/schemas/IntentCallsPayload' + preconditions: + type: array + description: '[]IntentPrecondition' + items: + $ref: '#/components/schemas/IntentPrecondition' + executionStatus: + type: string + metaTxnId: + type: string + txnHash: + type: string + updatedAt: + type: string + createdAt: + type: string + MetaTxnReceipt: + type: object + required: + - metaTxID + - status + properties: + metaTxID: + type: string + status: + type: string + txnReceipt: + type: string + revertReason: + type: string + InviteCode: + type: object + required: + - code + - source + - usesLeft + - ownerAccount + - url + properties: + code: + type: string + source: + type: string + usesLeft: + type: number + ownerAccount: + type: string + email: + type: string + url: + type: string + createdAt: + type: string + expiresAt: + type: string + InviteCodeAccount: + type: object + required: + - code + - claimedByUserAddress + properties: + code: + type: string + claimedByUserAddress: + type: string + claimedAt: + type: string + InviteInfo: + type: object + required: + - expiryInHours + - max + - invites + properties: + expiryInHours: + type: number + max: + type: number + invites: + type: array + description: '[]InviteCode' + items: + $ref: '#/components/schemas/InviteCode' + ContractCall: + type: object + required: + - signature + - function + - args + properties: + signature: + type: string + function: + type: string + args: + type: array + description: '[]TupleComponent' + items: + $ref: '#/components/schemas/TupleComponent' + TupleComponent: + type: object + required: + - type + - value + properties: + name: + type: string + type: + type: string + value: + type: object + AddressOverrides: + type: object + properties: + trailsLiFiSapientSignerAddress: + type: string + trailsRelaySapientSignerAddress: + type: string + trailsCCTPV2SapientSignerAddress: + type: string + TakerFee: + type: object + required: + - address + - bps + properties: + address: + type: string + bps: + type: number + OriginCall: + type: object + required: + - chainId + - to + - transactionData + - transactionValue + properties: + chainId: + type: number + to: + type: string + transactionData: + type: string + transactionValue: + type: string + IntentPrecondition: + type: object + required: + - type + - chainId + - data + properties: + type: + type: string + chainId: + type: string + data: + type: object + UserStorage: + type: object + required: + - userAddress + - key + - value + properties: + userAddress: + type: string + key: + type: string + value: + type: object + Token: + type: object + required: + - chainId + - contractAddress + properties: + chainId: + type: number + contractAddress: + type: string + tokenId: + type: string + Price: + type: object + required: + - value + - currency + properties: + value: + type: number + currency: + type: string + TokenPrice: + type: object + required: + - token + - floorPrice + - buyPrice + - sellPrice + - updatedAt + properties: + token: + $ref: '#/components/schemas/Token' + price: + $ref: '#/components/schemas/Price' + price24hChange: + $ref: '#/components/schemas/Price' + price24hVol: + $ref: '#/components/schemas/Price' + floorPrice: + $ref: '#/components/schemas/Price' + buyPrice: + $ref: '#/components/schemas/Price' + sellPrice: + $ref: '#/components/schemas/Price' + updatedAt: + type: string + ExchangeRate: + type: object + required: + - name + - symbol + - value + - vsCurrency + - currencyType + properties: + name: + type: string + symbol: + type: string + value: + type: number + vsCurrency: + type: string + currencyType: + type: string + LinkedWallet: + type: object + required: + - id + - walletAddress + - linkedWalletAddress + properties: + id: + type: number + walletType: + type: string + walletAddress: + type: string + linkedWalletAddress: + type: string + createdAt: + type: string + Page: + type: object + properties: + pageSize: + type: number + page: + type: number + totalRecords: + type: number + column: + type: string + before: + type: object + after: + type: object + sort: + type: array + description: '[]SortBy' + items: + $ref: '#/components/schemas/SortBy' + more: + type: boolean + SortBy: + type: object + required: + - column + - order + properties: + column: + type: string + order: + $ref: '#/components/schemas/SortOrder' + LifiToken: + type: object + required: + - chainId + - address + - symbol + - name + - decimals + - priceUsd + - coinKey + - logoUri + properties: + chainId: + type: number + address: + type: string + symbol: + type: string + name: + type: string + decimals: + type: number + priceUsd: + type: number + price: + type: string + coinKey: + type: string + logoUri: + type: string + GetLifiSwapRouteParams: + type: object + required: + - direction + - chainId + - walletAddress + - tokenAddress + - tokenAmount + properties: + direction: + $ref: '#/components/schemas/GetLifiSwapRouteDirection' + chainId: + type: number + walletAddress: + type: string + tokenAddress: + type: string + tokenAmount: + type: string + LifiSwapRoute: + type: object + required: + - fromChainId + - toChainId + - fromTokens + - toTokens + properties: + fromChainId: + type: number + toChainId: + type: number + fromTokens: + type: array + description: '[]LifiToken' + items: + $ref: '#/components/schemas/LifiToken' + toTokens: + type: array + description: '[]LifiToken' + items: + $ref: '#/components/schemas/LifiToken' + GetLifiSwapQuoteParams: + type: object + required: + - chainId + - walletAddress + - fromTokenAddress + - toTokenAddress + - includeApprove + - slippageBps + properties: + chainId: + type: number + walletAddress: + type: string + fromTokenAddress: + type: string + toTokenAddress: + type: string + fromTokenAmount: + type: string + toTokenAmount: + type: string + includeApprove: + type: boolean + slippageBps: + type: number + LifiSwapQuote: + type: object + required: + - currencyAddress + - currencyBalance + - price + - maxPrice + - to + - transactionData + - transactionValue + - approveData + - amount + - amountMin + properties: + currencyAddress: + type: string + currencyBalance: + type: string + price: + type: string + maxPrice: + type: string + to: + type: string + transactionData: + type: string + transactionValue: + type: string + approveData: + type: string + amount: + type: string + amountMin: + type: string + CurrencyGroup: + type: object + required: + - name + - tokens + properties: + name: + type: string + tokens: + type: array + description: '[]CurrencyGroupToken' + items: + $ref: '#/components/schemas/CurrencyGroupToken' + CurrencyGroupToken: + type: object + required: + - chainId + - tokenAddress + properties: + chainId: + type: number + tokenAddress: + type: string + OffchainInventory: + type: object + required: + - id + - projectId + - chainId + - externalProductId + - paymentTokenAddress + - paymentTokenType + - paymentTokenId + - paymentAmount + - paymentRecipient + - createdAt + properties: + id: + type: number + projectId: + type: number + chainId: + type: number + externalProductId: + type: string + paymentTokenAddress: + type: string + paymentTokenType: + $ref: '#/components/schemas/TokenType' + paymentTokenId: + type: number + paymentAmount: + type: number + paymentRecipient: + type: string + chainedCallAddress: + type: string + chainedCallData: + type: string + allowCrossChainPayments: + type: boolean + callbackURL: + type: string + createdAt: + type: string + deletedAt: + type: string + CCTPTransfer: + type: object + required: + - id + - sourceTxHash + - sourceChainId + - destinationChainId + - message + - attestation + - status + - createdAt + - updatedAt + properties: + id: + type: string + sourceTxHash: + type: string + sourceChainId: + type: number + destinationChainId: + type: number + message: + type: string + attestation: + type: string + status: + type: string + createdAt: + type: string + updatedAt: + type: string + OffchainPayment: + type: object + required: + - id + - offchainInventoryId + - productRecipient + - paymentChainId + - paymentTokenAddress + - expiration + - createdAt + properties: + id: + type: number + offchainInventoryId: + type: number + productRecipient: + type: string + paymentChainId: + type: number + paymentTokenAddress: + type: string + expiration: + type: string + createdAt: + type: string + completedAt: + type: string + processedAt: + type: string + PaymentResponse: + type: object + required: + - paymentId + - offchainInventoryId + - chainId + - externalProductId + - paymentTokenAddress + - paymentTokenType + - paymentTokenId + - paymentTotal + - expiration + - signature + - txTo + - txData + properties: + paymentId: + type: number + offchainInventoryId: + type: number + chainId: + type: number + externalProductId: + type: string + paymentTokenAddress: + type: string + paymentTokenType: + $ref: '#/components/schemas/TokenType' + paymentTokenId: + type: number + paymentTotal: + type: number + expiration: + type: string + signature: + type: string + txTo: + type: string + txData: + type: string + AdoptedChildWallet: + type: object + required: + - address + properties: + address: + type: string + Pack: + type: object + required: + - id + - chainId + - projectId + - contractAddress + - packId + - content + properties: + id: + type: number + chainId: + type: number + projectId: + type: number + contractAddress: + type: string + packId: + type: string + content: + type: array + description: '[]PackContent' + items: + $ref: '#/components/schemas/PackContent' + createdAt: + type: string + PackContent: + type: object + required: + - tokenAddresses + - isERC721 + - tokenIds + - amounts + properties: + tokenAddresses: + type: array + description: '[]string' + items: + type: string + isERC721: + type: array + description: '[]bool' + items: + type: boolean + tokenIds: + type: array + description: '[][]string' + items: + type: array + description: '[]string' + items: + type: string + amounts: + type: array + description: '[][]string' + items: + type: array + description: '[]string' + items: + type: string + TransakCountry: + type: object + required: + - alpha2 + - alpha3 + - isAllowed + - isLightKycAllowed + - name + - currencyCode + - supportedDocuments + - partners + - states + properties: + alpha2: + type: string + alpha3: + type: string + isAllowed: + type: boolean + isLightKycAllowed: + type: boolean + name: + type: string + currencyCode: + type: string + supportedDocuments: + type: array + description: '[]string' + items: + type: string + partners: + type: array + description: '[]TransakPartner' + items: + $ref: '#/components/schemas/TransakPartner' + states: + type: array + description: '[]TransakState' + items: + $ref: '#/components/schemas/TransakState' + TransakPartner: + type: object + required: + - name + - isCardPayment + - currencyCode + properties: + name: + type: string + isCardPayment: + type: boolean + currencyCode: + type: string + TransakState: + type: object + required: + - code + - name + - isAllowed + properties: + code: + type: string + name: + type: string + isAllowed: + type: boolean + TransakCryptoCurrency: + type: object + required: + - id + - coinID + - address + - addressAdditionalData + - createdAt + - decimals + - image + - isAllowed + - isPopular + - isStable + - name + - roundOff + - symbol + - isIgnorePriceVerification + - imageBk + - kycCountriesNotSupported + - network + - uniqueID + - tokenType + - tokenIdentifier + - isPayInAllowed + - isSuspended + properties: + id: + type: string + coinID: + type: string + address: + type: string + addressAdditionalData: + type: object + createdAt: + type: string + decimals: + type: number + image: + $ref: '#/components/schemas/TransakCryptoCurrencyImage' + isAllowed: + type: boolean + isPopular: + type: boolean + isStable: + type: boolean + name: + type: string + roundOff: + type: number + symbol: + type: string + isIgnorePriceVerification: + type: boolean + imageBk: + $ref: '#/components/schemas/TransakCryptoCurrencyImage' + kycCountriesNotSupported: + type: array + description: '[]string' + items: + type: string + network: + $ref: '#/components/schemas/TransakCryptoCurrencyNetwork' + uniqueID: + type: string + tokenType: + type: string + tokenIdentifier: + type: string + isPayInAllowed: + type: boolean + isSuspended: + type: boolean + TransakCryptoCurrencyImage: + type: object + required: + - large + - small + - thumb + properties: + large: + type: string + small: + type: string + thumb: + type: string + TransakCryptoCurrencyNetwork: + type: object + required: + - name + - fiatCurrenciesNotSupported + - chainID + properties: + name: + type: string + fiatCurrenciesNotSupported: + type: array + description: '[]any' + items: + type: object + chainID: + type: string + TransakCryptoCurrencyNetworkFiatNotSupported: + type: object + required: + - fiatCurrency + - paymentMethod + properties: + fiatCurrency: + type: string + paymentMethod: + type: string + TransakFiatCurrency: + type: object + required: + - symbol + - supportingCountries + - logoSymbol + - name + - paymentOptions + - isPopular + - isAllowed + - roundOff + - isPayOutAllowed + - defaultCountryForNFT + - icon + - displayMessage + properties: + symbol: + type: string + supportingCountries: + type: array + description: '[]string' + items: + type: string + logoSymbol: + type: string + name: + type: string + paymentOptions: + type: array + description: '[]TransakFiatCurrencyPaymentOption' + items: + $ref: '#/components/schemas/TransakFiatCurrencyPaymentOption' + isPopular: + type: boolean + isAllowed: + type: boolean + roundOff: + type: number + isPayOutAllowed: + type: boolean + defaultCountryForNFT: + type: string + icon: + type: string + displayMessage: + type: string + TransakFiatCurrencyPaymentOption: + type: object + required: + - name + - id + - isNftAllowed + - isNonCustodial + - processingTime + - displayText + - icon + - limitCurrency + - isActive + - provider + - maxAmount + - minAmount + - defaultAmount + - isConverted + - visaPayoutCountries + - mastercardPayoutCountries + - isPayOutAllowed + - minAmountForPayOut + - maxAmountForPayOut + - defaultAmountForPayOut + properties: + name: + type: string + id: + type: string + isNftAllowed: + type: boolean + isNonCustodial: + type: boolean + processingTime: + type: string + displayText: + type: boolean + icon: + type: string + limitCurrency: + type: string + isActive: + type: boolean + provider: + type: string + maxAmount: + type: number + minAmount: + type: number + defaultAmount: + type: number + isConverted: + type: boolean + visaPayoutCountries: + type: array + description: '[]string' + items: + type: string + mastercardPayoutCountries: + type: array + description: '[]string' + items: + type: string + isPayOutAllowed: + type: boolean + minAmountForPayOut: + type: number + maxAmountForPayOut: + type: number + defaultAmountForPayOut: + type: number + TransakPrice: + type: object + required: + - quoteID + - conversionPrice + - marketConversionPrice + - slippage + - fiatCurrency + - cryptoCurrency + - paymentMethod + - fiatAmount + - cryptoAmount + - isBuyOrSell + - network + - feeDecimal + - totalFee + - feeBreakdown + - nonce + - cryptoLiquidityProvider + - notes + properties: + quoteID: + type: string + conversionPrice: + type: number + marketConversionPrice: + type: number + slippage: + type: number + fiatCurrency: + type: string + cryptoCurrency: + type: string + paymentMethod: + type: string + fiatAmount: + type: number + cryptoAmount: + type: number + isBuyOrSell: + type: string + network: + type: string + feeDecimal: + type: number + totalFee: + type: number + feeBreakdown: + type: array + description: '[]TransakPriceFeeBreakdown' + items: + $ref: '#/components/schemas/TransakPriceFeeBreakdown' + nonce: + type: number + cryptoLiquidityProvider: + type: string + notes: + type: array + description: '[]any' + items: + type: object + TransakPriceFeeBreakdown: + type: object + required: + - Name + - Value + - ID + - Ids + properties: + Name: + type: string + Value: + type: number + ID: + type: string + Ids: + type: array + description: '[]string' + items: + type: string + TransakGetPriceParams: + type: object + required: + - fiatCurrency + - cryptoCurrency + - isBuyOrSell + - network + - paymentMethod + - fiatAmount + - cryptoAmount + - quoteCountryCode + properties: + fiatCurrency: + type: string + cryptoCurrency: + type: string + isBuyOrSell: + $ref: '#/components/schemas/TransakBuySell' + network: + type: string + paymentMethod: + type: string + fiatAmount: + type: number + cryptoAmount: + type: number + quoteCountryCode: + type: string + TransakNFTData: + type: object + required: + - imageUrl + - nftName + - collectionAddress + - tokenIds + - prices + - quantity + - nftType + properties: + imageUrl: + type: string + nftName: + type: string + collectionAddress: + type: string + tokenIds: + type: array + description: '[]string' + items: + type: string + prices: + type: array + description: '[]float64' + items: + type: number + quantity: + type: number + nftType: + type: string + TransakGetWidgetURLParams: + type: object + required: + - nftData + properties: + targetContractAddress: + type: string + isNft: + type: boolean + calldata: + type: string + cryptoCurrencyCode: + type: string + estimatedGasLimit: + type: number + nftData: + type: array + description: '[]TransakNFTData' + items: + $ref: '#/components/schemas/TransakNFTData' + walletAddress: + type: string + disableWalletAddressForm: + type: boolean + partnerOrderId: + type: string + network: + type: string + referrerDomain: + type: string + fiatAmount: + type: string + fiatCurrency: + type: string + defaultFiatAmount: + type: string + defaultCryptoCurrency: + type: string + cryptoCurrencyList: + type: string + networks: + type: string + TransakChain: + type: object + required: + - name + - chainId + properties: + name: + type: string + chainId: + type: number + CheckoutOptionsPrimaryParams: + type: object + required: + - quantity + - tokenId + properties: + quantity: + type: string + tokenId: + type: string + CheckoutOptionsSecondaryParams: + type: object + required: + - collectionAddress + - marketplaceAddress + - currencyAddress + - priceAmount + - tokenId + properties: + collectionAddress: + type: string + marketplaceAddress: + type: string + currencyAddress: + type: string + priceAmount: + type: string + tokenId: + type: string + CheckoutOptions: + type: object + required: + - crypto + - swap + - nftCheckout + - onRamp + properties: + crypto: + $ref: '#/components/schemas/CheckoutOptionCrypto' + swap: + type: array + description: '[]CheckoutOptionSwapProvider' + items: + $ref: '#/components/schemas/CheckoutOptionSwapProvider' + nftCheckout: + type: array + description: '[]CheckoutOptionNFTCheckoutProvider' + items: + $ref: '#/components/schemas/CheckoutOptionNFTCheckoutProvider' + onRamp: + type: array + description: '[]CheckoutOptionOnRampProvider' + items: + $ref: '#/components/schemas/CheckoutOptionOnRampProvider' + FortePayCreateIntent: + type: object + required: + - blockchain + - buyer + - currency + - idempotencyKey + - items + - seller + - transactionType + properties: + blockchain: + type: string + buyer: + $ref: '#/components/schemas/FortePayBuyer' + currency: + type: string + idempotencyKey: + type: string + items: + type: array + description: '[]FortePayItem' + items: + $ref: '#/components/schemas/FortePayItem' + seller: + $ref: '#/components/schemas/FortePaySeller' + transactionType: + type: string + FortePayBuyer: + type: object + required: + - wallet + - email + - id + properties: + wallet: + $ref: '#/components/schemas/FortePayWallet' + email: + type: string + id: + type: string + FortePaySeller: + type: object + required: + - wallet + properties: + wallet: + $ref: '#/components/schemas/FortePayWallet' + FortePayWallet: + type: object + required: + - address + - blockchain + properties: + address: + type: string + blockchain: + type: string + FortePayItem: + type: object + required: + - amount + - id + - imageUrl + - listingData + - nftData + - mintData + - title + properties: + amount: + type: string + id: + type: string + imageUrl: + type: string + listingData: + $ref: '#/components/schemas/FortePayItemListingData' + nftData: + $ref: '#/components/schemas/FortePayItemNFTData' + mintData: + $ref: '#/components/schemas/FortePayItemMintData' + title: + type: string + FortePayItemListingData: + type: object + required: + - orderHash + - protocol + - protocolAddress + - auctionHouse + - tokenAddress + - calldata + - payToAddress + - structuredCalldata + properties: + orderHash: + type: string + protocol: + type: string + protocolAddress: + type: string + auctionHouse: + type: string + tokenAddress: + type: string + calldata: + type: string + payToAddress: + type: string + structuredCalldata: + type: object + FortePayItemNFTData: + type: object + required: + - contractAddress + - tokenId + properties: + contractAddress: + type: string + tokenId: + type: string + FortePayItemMintData: + type: object + required: + - nonce + - protocol + - protocolAddress + - signature + - tokenIds + - calldata + - payToAddress + - tokenContractAddress + - structuredCalldata + properties: + nonce: + type: string + protocol: + type: string + protocolAddress: + type: string + signature: + type: string + tokenIds: + type: array + description: '[]string' + items: + type: string + calldata: + type: string + payToAddress: + type: string + tokenContractAddress: + type: string + structuredCalldata: + type: object + FortePayIntent: + type: object + required: + - flow + - widgetData + - paymentIntentId + - notes + properties: + flow: + type: string + widgetData: + type: string + paymentIntentId: + type: string + notes: + type: array + description: '[]string' + items: + type: string + FortePaymentStatus: + type: object + required: + - paymentIntentId + - status + properties: + paymentIntentId: + type: string + status: + type: string + CrossChainFee: + type: object + required: + - providerFee + - trailsSwapFee + - providerFeeUSD + - trailsSwapFeeUSD + - totalFeeAmount + - totalFeeUSD + properties: + providerFee: + type: string + trailsSwapFee: + type: string + providerFeeUSD: + type: number + trailsSwapFeeUSD: + type: number + totalFeeAmount: + type: string + totalFeeUSD: + type: number + MetaTxnFeeDetail: + type: object + required: + - metaTxnID + - estimatedGasLimit + - feeNative + properties: + metaTxnID: + type: string + estimatedGasLimit: + type: string + feeNative: + type: string + ChainExecuteQuote: + type: object + required: + - chainId + - totalGasLimit + - gasPrice + - totalFeeAmount + - nativeTokenSymbol + - metaTxnFeeDetails + properties: + chainId: + type: string + totalGasLimit: + type: string + gasPrice: + type: string + totalFeeAmount: + type: string + nativeTokenSymbol: + type: string + nativeTokenPrice: + type: string + metaTxnFeeDetails: + type: array + description: '[]MetaTxnFeeDetail' + items: + $ref: '#/components/schemas/MetaTxnFeeDetail' + totalFeeUSD: + type: string + ExecuteQuote: + type: object + required: + - chainQuotes + properties: + chainQuotes: + type: array + description: '[]ChainExecuteQuote' + items: + $ref: '#/components/schemas/ChainExecuteQuote' + TrailsFee: + type: object + required: + - executeQuote + - trailsFixedFeeUSD + properties: + executeQuote: + $ref: '#/components/schemas/ExecuteQuote' + crossChainFee: + $ref: '#/components/schemas/CrossChainFee' + takerFeeAmount: + type: string + takerFeeUSD: + type: number + trailsFixedFeeUSD: + type: number + feeToken: + type: string + originTokenTotalAmount: + type: string + totalFeeAmount: + type: string + totalFeeUSD: + type: string + quoteProvider: + type: string + IntentQuote: + type: object + required: + - fromAmount + - fromAmountMin + - toAmount + - toAmountMin + - priceImpact + - priceImpactUsd + - maxSlippage + - quoteProvider + - quoteProviderRequestId + - quoteProviderFeeUsd + - feeQuotes + properties: + fromAmount: + type: string + fromAmountMin: + type: string + toAmount: + type: string + toAmountMin: + type: string + priceImpact: + type: number + priceImpactUsd: + type: string + maxSlippage: + type: number + quoteProvider: + type: string + quoteProviderRequestId: + type: string + quoteProviderFeeUsd: + type: string + feeQuotes: + type: object + description: 'map' + additionalProperties: + type: string + API_IsValidSignature_Request: + type: object + properties: + chainId: + type: string + walletAddress: + type: string + digest: + type: string + signature: + type: string + API_IsValidMessageSignature_Request: + type: object + properties: + chainId: + type: string + walletAddress: + type: string + message: + type: string + signature: + type: string + API_IsValidTypedDataSignature_Request: + type: object + properties: + chainId: + type: string + walletAddress: + type: string + typedData: + type: object + signature: + type: string + API_IsValidETHAuthProof_Request: + type: object + properties: + chainId: + type: string + walletAddress: + type: string + ethAuthProofString: + type: string + API_LinkWallet_Request: + type: object + properties: + parentWalletAddress: + type: string + parentWalletMessage: + type: string + parentWalletSignature: + type: string + linkedWalletAddress: + type: string + linkedWalletMessage: + type: string + linkedWalletSignature: + type: string + signatureChainId: + type: string + linkedWalletType: + type: string + API_GetLinkedWallets_Request: + type: object + properties: + parentWalletAddress: + type: string + parentWalletMessage: + type: string + parentWalletSignature: + type: string + signatureChainId: + type: string + API_RemoveLinkedWallet_Request: + type: object + properties: + parentWalletAddress: + type: string + parentWalletMessage: + type: string + parentWalletSignature: + type: string + linkedWalletAddress: + type: string + signatureChainId: + type: string + API_GetLifiChains_Request: + type: object + API_GetLifiTokens_Request: + type: object + properties: + chainIds: + type: array + description: '[]uint64' + items: + type: number + API_GetLifiSwapRoutes_Request: + type: object + properties: + params: + $ref: '#/components/schemas/GetLifiSwapRouteParams' + API_GetLifiSwapQuote_Request: + type: object + properties: + params: + $ref: '#/components/schemas/GetLifiSwapQuoteParams' + API_GetCCTPTransfer_Request: + type: object + properties: + id: + type: string + API_QueueCCTPTransfer_Request: + type: object + properties: + sourceTxHash: + type: string + metaTxHash: + type: string + sourceChainId: + type: number + destinationChainId: + type: number + API_QueueIntentConfigExecution_Request: + type: object + properties: + intentConfigId: + type: number + API_GetIntentConfigExecutionStatus_Request: + type: object + properties: + intentConfigId: + type: number + API_ListIntentConfigs_Request: + type: object + properties: + page: + $ref: '#/components/schemas/Page' + executionStatus: + type: string + API_QueueMetaTxnReceipt_Request: + type: object + properties: + metaTxID: + type: string + API_IsValidSignature_Response: + type: object + properties: + isValid: + type: boolean + API_IsValidMessageSignature_Response: + type: object + properties: + isValid: + type: boolean + API_IsValidTypedDataSignature_Response: + type: object + properties: + isValid: + type: boolean + API_IsValidETHAuthProof_Response: + type: object + properties: + isValid: + type: boolean + API_LinkWallet_Response: + type: object + properties: + status: + type: boolean + API_GetLinkedWallets_Response: + type: object + properties: + linkedWallets: + type: array + description: '[]LinkedWallet' + items: + $ref: '#/components/schemas/LinkedWallet' + API_RemoveLinkedWallet_Response: + type: object + properties: + status: + type: boolean + API_GetLifiChains_Response: + type: object + properties: + chains: + type: array + description: '[]uint64' + items: + type: number + API_GetLifiTokens_Response: + type: object + properties: + tokens: + type: array + description: '[]Token' + items: + $ref: '#/components/schemas/Token' + API_GetLifiSwapRoutes_Response: + type: object + properties: + routes: + type: array + description: '[]LifiSwapRoute' + items: + $ref: '#/components/schemas/LifiSwapRoute' + API_GetLifiSwapQuote_Response: + type: object + properties: + quote: + $ref: '#/components/schemas/LifiSwapQuote' + API_GetCCTPTransfer_Response: + type: object + properties: + transfer: + $ref: '#/components/schemas/CCTPTransfer' + API_QueueCCTPTransfer_Response: + type: object + properties: + transfer: + $ref: '#/components/schemas/CCTPTransfer' + API_QueueIntentConfigExecution_Response: + type: object + properties: + status: + type: boolean + API_GetIntentConfigExecutionStatus_Response: + type: object + properties: + executionStatus: + type: string + API_ListIntentConfigs_Response: + type: object + properties: + page: + $ref: '#/components/schemas/Page' + intentConfigs: + type: array + description: '[]IntentConfig' + items: + $ref: '#/components/schemas/IntentConfig' + API_QueueMetaTxnReceipt_Response: + type: object + properties: + status: + type: boolean +paths: + /rpc/API/IsValidSignature: + post: + operationId: API-IsValidSignature + tags: ["API"] + summary: "TODO: we can add walletContext optional in the future when we need it" + description: | + NOTE: chainId can be either a number or canonical name + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidSignature_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidSignature_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/IsValidMessageSignature: + post: + operationId: API-IsValidMessageSignature + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidMessageSignature_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidMessageSignature_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/IsValidTypedDataSignature: + post: + operationId: API-IsValidTypedDataSignature + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidTypedDataSignature_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidTypedDataSignature_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/IsValidETHAuthProof: + post: + operationId: API-IsValidETHAuthProof + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidETHAuthProof_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_IsValidETHAuthProof_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/LinkWallet: + post: + operationId: API-LinkWallet + tags: ["API"] + summary: "" + description: | + Linked wallets (v0 -- simple support) + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_LinkWallet_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_LinkWallet_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetLinkedWallets: + post: + operationId: API-GetLinkedWallets + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLinkedWallets_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLinkedWallets_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/RemoveLinkedWallet: + post: + operationId: API-RemoveLinkedWallet + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_RemoveLinkedWallet_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_RemoveLinkedWallet_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetLifiChains: + post: + operationId: API-GetLifiChains + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiChains_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiChains_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetLifiTokens: + post: + operationId: API-GetLifiTokens + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiTokens_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiTokens_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetLifiSwapRoutes: + post: + operationId: API-GetLifiSwapRoutes + tags: ["API"] + summary: "All parameters except `params` are deprecated." + description: | + Use only the `params` object to pass values. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiSwapRoutes_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiSwapRoutes_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetLifiSwapQuote: + post: + operationId: API-GetLifiSwapQuote + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiSwapQuote_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetLifiSwapQuote_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetCCTPTransfer: + post: + operationId: API-GetCCTPTransfer + tags: ["API"] + summary: "" + description: | + CCTP + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetCCTPTransfer_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetCCTPTransfer_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/QueueCCTPTransfer: + post: + operationId: API-QueueCCTPTransfer + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_QueueCCTPTransfer_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_QueueCCTPTransfer_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/QueueIntentConfigExecution: + post: + operationId: API-QueueIntentConfigExecution + tags: ["API"] + summary: "" + description: | + Intent Machine Worker + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_QueueIntentConfigExecution_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_QueueIntentConfigExecution_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/GetIntentConfigExecutionStatus: + post: + operationId: API-GetIntentConfigExecutionStatus + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetIntentConfigExecutionStatus_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_GetIntentConfigExecutionStatus_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/ListIntentConfigs: + post: + operationId: API-ListIntentConfigs + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_ListIntentConfigs_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_ListIntentConfigs_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' + /rpc/API/QueueMetaTxnReceipt: + post: + operationId: API-QueueMetaTxnReceipt + tags: ["API"] + summary: "" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/API_QueueMetaTxnReceipt_Request' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/API_QueueMetaTxnReceipt_Response' + '4XX': + description: Client error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcEndpoint' + - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' + - $ref: '#/components/schemas/ErrorWebrpcBadRoute' + - $ref: '#/components/schemas/ErrorWebrpcBadMethod' + - $ref: '#/components/schemas/ErrorWebrpcBadRequest' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' + - $ref: '#/components/schemas/ErrorWebrpcStreamLost' + - $ref: '#/components/schemas/ErrorUnauthorized' + - $ref: '#/components/schemas/ErrorPermissionDenied' + - $ref: '#/components/schemas/ErrorSessionExpired' + - $ref: '#/components/schemas/ErrorMethodNotFound' + - $ref: '#/components/schemas/ErrorRequestConflict' + - $ref: '#/components/schemas/ErrorAborted' + - $ref: '#/components/schemas/ErrorGeoblocked' + - $ref: '#/components/schemas/ErrorRateLimited' + - $ref: '#/components/schemas/ErrorProjectNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyNotFound' + - $ref: '#/components/schemas/ErrorAccessKeyMismatch' + - $ref: '#/components/schemas/ErrorInvalidOrigin' + - $ref: '#/components/schemas/ErrorInvalidService' + - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorQuotaExceeded' + - $ref: '#/components/schemas/ErrorQuotaRateLimit' + - $ref: '#/components/schemas/ErrorNoDefaultKey' + - $ref: '#/components/schemas/ErrorMaxAccessKeys' + - $ref: '#/components/schemas/ErrorAtLeastOneKey' + - $ref: '#/components/schemas/ErrorTimeout' + - $ref: '#/components/schemas/ErrorInvalidArgument' + - $ref: '#/components/schemas/ErrorUnavailable' + - $ref: '#/components/schemas/ErrorQueryFailed' + - $ref: '#/components/schemas/ErrorNotFound' + - $ref: '#/components/schemas/ErrorUnsupportedNetwork' + '5XX': + description: Server error + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ErrorWebrpcBadResponse' + - $ref: '#/components/schemas/ErrorWebrpcServerPanic' + - $ref: '#/components/schemas/ErrorWebrpcInternalError' diff --git a/guides/guide-cards.json b/guides/guide-cards.json index 97a2c63a..b52eccae 100644 --- a/guides/guide-cards.json +++ b/guides/guide-cards.json @@ -1,6 +1,6 @@ { - "lastUpdated": "2025-09-03T12:15:39.593Z", - "totalCards": 6, + "lastUpdated": "2025-12-02T08:29:20.242Z", + "totalCards": 7, "sections": [ { "title": "Game Developers", From c042ea16aa39c453c3cf9db83cc752f63f7b9ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Thu, 4 Dec 2025 12:09:49 +0100 Subject: [PATCH 04/12] Added more details on recovering wallet from storage and smart contract return types (#201) * added more details on recovering wallet from storage * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 201/merge * explanation for return types * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 201/merge --------- Co-authored-by: github-actions[bot] --- es/sdk/unity/onboard/recovering-sessions.mdx | 120 ++++++++++++++ es/sdk/unity/onboard/session-management.mdx | 2 +- es/sdk/unity/power/advanced/contracts.mdx | 156 +++++++++++++++++++ es/sdk/unity/quickstart.mdx | 30 ++-- es/sdk/unity/setup.mdx | 4 +- ja/sdk/unity/onboard/recovering-sessions.mdx | 37 +++-- ja/sdk/unity/onboard/session-management.mdx | 2 +- ja/sdk/unity/power/advanced/contracts.mdx | 13 ++ ja/sdk/unity/quickstart.mdx | 26 ++-- ja/sdk/unity/setup.mdx | 2 +- sdk/unity/onboard/recovering-sessions.mdx | 38 +++-- sdk/unity/onboard/session-management.mdx | 2 +- sdk/unity/power/advanced/contracts.mdx | 15 ++ sdk/unity/quickstart.mdx | 16 +- sdk/unity/setup.mdx | 2 +- 15 files changed, 408 insertions(+), 57 deletions(-) create mode 100644 es/sdk/unity/onboard/recovering-sessions.mdx create mode 100644 es/sdk/unity/power/advanced/contracts.mdx diff --git a/es/sdk/unity/onboard/recovering-sessions.mdx b/es/sdk/unity/onboard/recovering-sessions.mdx new file mode 100644 index 00000000..6f3170f8 --- /dev/null +++ b/es/sdk/unity/onboard/recovering-sessions.mdx @@ -0,0 +1,120 @@ +--- +title: Recuperación segura de sesión +description: El SDK ofrece la opción de almacenar la información de la wallet de sesión de forma segura en ciertas plataformas utilizando el almacenamiento seguro nativo. +--- + +# Recuperación de sesiones +Por defecto, el SDK requerirá que los usuarios inicien sesión cada vez que la aplicación se cierre completamente. Esto se debe a que, por defecto, no guardamos la información de la wallet de sesión (por ejemplo, claves privadas) en ningún tipo de almacenamiento persistente para proteger la seguridad del usuario. + +Sin embargo, en ciertas plataformas, hemos integrado el almacenamiento seguro nativo de la plataforma. + +Si habilita `StoreSessionPrivateKeyInSecureStorage` en su ScriptableObject `SequenceConfig`, almacenaremos automáticamente la información de la wallet de sesión (en plataformas compatibles) y expondremos la opción de intentar recuperar la sesión en `SequenceLogin`. La `SequenceLoginWindow` predeterminada gestionará automáticamente este flujo de UI también (consulte [Autenticación](/sdk/unity/onboard/authentication/intro)). Si la plataforma no es compatible, esta opción no tendrá efecto. + +A continuación puede ver las plataformas compatibles y aprender sobre la solución de almacenamiento seguro de cada una; es importante entender los conceptos básicos de cómo funcionan estos sistemas y pensar cuidadosamente en las implicaciones de seguridad de almacenar claves privadas (o cualquier secreto) en almacenamiento persistente. + +## Integración +Tiene dos opciones para recuperar una wallet desde el almacenamiento. La primera es usar la clase `EmbeddedWalletAdapter`. Si esta llamada tiene éxito, el `EmbeddedWalletAdapter` contendrá la instancia de Wallet. + +```csharp +bool recovered = await EmbeddedWalletAdapter.GetInstance().TryRecoverWalletFromStorage(); +``` + +De lo contrario, utilice la clase subyacente `SequenceLogin`. + +```csharp +(bool storageEnabled, IWallet wallet) = await SequenceLogin.GetInstance().TryToRestoreSessionAsync(); +``` + +En ambos casos, puede escuchar el evento `SequenceWallet.OnWalletCreated` cada vez que una wallet se recupere del almacenamiento o se cree durante el proceso de inicio de sesión. + +## Detalles de la plataforma + +### Editor +En el editor, usamos PlayerPrefs para almacenar la clave privada. También deberá habilitar `EditorStoreSessionPrivateKeyInSecureStorage` en SequenceConfig para usar el almacenamiento seguro y recuperar sesiones dentro del editor. Esta bandera separada le facilita probar ambos flujos sin modificar el comportamiento de sus builds. El almacenamiento seguro en el editor es solo para fines de desarrollo y no debe considerarse seguro para almacenamiento a largo plazo. + +### iOS +En iOS, utilizamos el [iOS Keychain](https://developer.apple.com/documentation/security/keychain_services?language=objc). + +### MacOS +En MacOS, utilizamos el [MacOS Keychain](https://developer.apple.com/documentation/security/keychain_services?language=objc). + +### Windows +En PCs con Windows, utilizamos la [Crypto: Next Generation - Data Protection API (CNG DPAPI)](https://learn.microsoft.com/en-us/windows/win32/seccng/cng-dpapi) + +### Web +En compilaciones Web, utilizamos [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) a través de [PlayerPrefs](https://docs.unity3d.com/ScriptReference/PlayerPrefs.html). + +### Android +En compilaciones Android, utilizamos el [Android Keystore](https://developer.android.com/privacy-and-security/keystore). + +El primer paso es importar el plugin `AndroidKeyBridge.java` en su carpeta Assets. Esto se hace fácilmente desde Samples en el package manager; simplemente importe el sample titulado `Android Secure Storage`. + +Nuestro plugin Keystore para Unity (incluido en el SDK) requiere una Plantilla Gradle Principal personalizada. Por favor, vaya a la configuración de su proyecto y, en `Player > Publishing Settings`, habilite `Custom Main Gradle Template`. Esto creará un archivo `Assets/Plugins/Android/mainTemplate.gradle` (o similar; el editor le mostrará la ruta) si aún no tiene uno. Aquí tiene un ejemplo de archivo `mainTemplate.gradle`; por favor, copie/pegue (o incorpore en su archivo existente). + +``` +apply plugin: 'com.android.library' +**APPLY_PLUGINS** + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.security:security-crypto:1.1.0-alpha03' + +**DEPS**} + +android { + compileSdkVersion **APIVERSION** + buildToolsVersion '**BUILDTOOLS**' + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + minSdkVersion **MINSDKVERSION** + targetSdkVersion **TARGETSDKVERSION** + ndk { + abiFilters **ABIFILTERS** + } + versionCode **VERSIONCODE** + versionName '**VERSIONNAME**' + consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD** + } + + lintOptions { + abortOnError false + } + + aaptOptions { + noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ') + ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~" + }**PACKAGING_OPTIONS** +}**REPOSITORIES** +**IL_CPP_BUILD_SETUP** +**SOURCE_BUILD_SETUP** +**EXTERNAL_SOURCES** +``` + +Nuestro plugin Keystore también requiere una Plantilla de Propiedades Gradle personalizada. Nuevamente, vaya a la configuración de su proyecto y, en `Player > Publishing Settings`, habilite `Custom Gradle Properties Template`. Esto creará un archivo `Assets/Plugins/Android/gradleTemplate.properties` (o similar; el editor le mostrará la ruta) si aún no tiene uno. Aquí tiene un ejemplo de archivo `gradleTemplate.properties`; por favor, copie/pegue (o incorpore en su archivo existente). + +``` +org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M +org.gradle.parallel=true +android.enableJetifier=true +android.useAndroidX=true +unityStreamingAssets=**STREAMING_ASSETS** +**ADDITIONAL_PROPERTIES** + +android.enableR8=**MINIFY_WITH_R_EIGHT** +``` + +## Solución de problemas +Si tiene problemas con el almacenamiento seguro o Google Sign-In en Android, siga estos pasos de solución de problemas. +- **Google Sign-In:** Asegúrese de que el valor `data android:scheme` en su archivo `AndroidManifest.xml` coincida con el `Url Scheme` en su archivo + `SequenceConfig.asset`. Verifique que esté todo en minúsculas. +- **Almacenamiento seguro:** Asegúrese de que su `mainTemplate.gradle` defina correctamente el plugin `androidx.security:security-crypto` y que no sea + sobrescrito por otro plugin o por el Android Plugin Resolver. +- **Pruebe nuestra demo:** [Instale nuestra build de demostración](https://drive.google.com/file/d/1rAvnPu56Hj3yDRL32_lr887xt-xMQoYK/view?usp=sharing) + y asegúrese de que funcione correctamente en su dispositivo. + - Compare la configuración de su proyecto Unity (AndroidManifest, archivos gradle, configuración del reproductor de Android) con nuestro [proyecto sdk.](https://github.com/0xsequence/sequence-unity) +- **Ideas adicionales:** Desinstale la app antes de instalar una nueva build, cambie su esquema de URL o el bundle id. \ No newline at end of file diff --git a/es/sdk/unity/onboard/session-management.mdx b/es/sdk/unity/onboard/session-management.mdx index bc557c70..d2b2f6e4 100644 --- a/es/sdk/unity/onboard/session-management.mdx +++ b/es/sdk/unity/onboard/session-management.mdx @@ -1,5 +1,5 @@ --- -title: Gestión de sesiones en Unity — Documentación de Sequence +title: Gestión de Sesiones --- Una vez que haya autenticado a su usuario con las APIs de Sequence y establecido una sesión, tiene disponibles varios métodos para gestionar la sesión. diff --git a/es/sdk/unity/power/advanced/contracts.mdx b/es/sdk/unity/power/advanced/contracts.mdx new file mode 100644 index 00000000..4d91c64a --- /dev/null +++ b/es/sdk/unity/power/advanced/contracts.mdx @@ -0,0 +1,156 @@ +--- +title: Smart Contracts +--- + +Crear un objeto `Contract` para un contrato ya desplegado es bastante sencillo. + +```csharp +Contract contract = new Contract(contractAddress, abi); +``` + +Aunque no es estrictamente necesario, se recomienda encarecidamente proporcionar el ABI del contrato como una cadena al crear un objeto contract. Si no lo hace, no podrá aprovechar completamente nuestra codificación y decodificación ABI. +Si decide seguir este camino, deberá proporcionar la firma completa de la función (nombre de la función + tipos de parámetros entre paréntesis - por ejemplo, transfer(address,uint256) para el método transfer de ERC20) al llamar a una función o consultar el contrato, y solo recibirá una cadena como respuesta a las consultas. + +## Llamar funciones de Smart Contract +Para llamar a un smart contract, usará el método `CallFunction` para crear un objeto `CallContractFunction`, que determinará el gasPrice, gasLimit, nonce y data apropiados para incluir en un nuevo `EthTransaction` al proporcionarle un cliente y un objeto `ContractCall` al método `Create` async Task + +Un ejemplo de cómo llamar a un smart contract sería el siguiente: + +```csharp +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); +``` + +Nota: si no desea esperar el recibo, puede usar `SendTransactionMethod` en su lugar. + +Alternativamente, si solo quiere crear el `EthTransaction` y enviarlo más tarde, puede usar directamente el objeto `CallContractFunction` de `CallFunction`. + +```csharp +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); +``` + +Notará que el método `CallFunction` acepta un número arbitrario de argumentos. Debe proporcionar los argumentos en el orden en que aparecen en el ABI/firma de la función. + +## Comprendiendo los mapeos de tipos de datos +Al interactuar con smart contracts, es importante entender cómo los tipos de datos de EVM se mapean a los tipos de datos de C# en la librería SequenceEthereum. + +Por ejemplo, si proporciona una cadena donde el ABI espera un entero, recibirá una excepción, incluso si esa cadena podría convertirse en un entero. + +### Address +En C# puede usar un tipo `string` o crear una instancia de `Address`. Asegúrese de que su cadena sea hexadecimal, +comience con `0x` y tenga una longitud fija de 42 caracteres. + +```csharp +Address address = new Address("0x123..."); +``` + +### Enteros +Para tipos de enteros como `int256`, `uint8` o `uint256` use el tipo `BigInteger` de System.Numerics. + +```csharp +// Simple number +BigInteger number = new BigInteger(10000); + +// From hex +string hexString = "0x0000000...01"; +BigInteger number = hexString.HexStringToBigInteger(); +``` + +### Bytes +Para definir tipos de datos byte de Solidity en C#, tiene la opción de crear un `FixedByte` para tipos como `byte16` o `byte32`. +Cuando su contrato requiera `bytes`, puede convertir cualquier valor en un `byte[]` de cualquier longitud. + +Si sus datos están representados como una cadena hexadecimal en C#, asegúrese de usar nuestra función `HexStringToByteArray()` para convertir +el valor hexadecimal de vuelta al arreglo de bytes original. + +Para arreglos de bytes como `byte32[]`, simplemente cree un `FixedByte[]` en C#. + +```csharp +// byte16 or byte32 +new FixedByte(16, new byte[] {}); + +// bytes +string someString = "abc0123456789"; +byte[] bytes = someString.ToByteArray(); + +// signature +string signature = "0x0ab123..."; +byte[] bytes = signature.HexStringToByteArray(); +``` + +### Structs +Use Tuples para llamar una función on-chain con un struct. Aquí hay un ejemplo de un struct en Solidity y cómo definirlo +usando el SDK de Unity de Sequence y pasarlo como argumento en una función `Contract.CallFunction`. + +Struct de Solidity + +```solidity +struct ExampleStruct { + address wallet; + uint256 amount; + byte32 data; +} +``` + +Equivalente en C# + +```csharp +Address wallet = new Address("0x..."); +BigInteger amount = new BigInteger(10000); +FixedByte data = new FixedByte(32, byteArrayData); +var arg = new Tuple(wallet, amount, data); +``` + +### Otros tipos +Para tipos de datos tradicionales en Solidity como `string` o `bool`, puede usar los mismos tipos de datos en C#. + +### Tipos de retorno +Cuando lea datos de un smart contract y utilice la función `Contract.SendQuery()`, puede usar TType para tipos de retorno simples como `string`, `BigInteger` o `bool`. Para tipos de retorno complejos como structs, use un `object[]` y analice manualmente los valores en su struct de C#. + +```csharp +// Let's consider a struct with the following variables: SomeStruct { address value1; uint256 value2; } +object[] structValues = Contract.SendQuery("SomeFunction"); + +SomeStruct newStruct = new SomeStruct() { + Value1 = new Address(structValues[0].ToString()), + Value2 = BigInteger.Parse(structValues[1].ToString()) +} +``` + +## Consultar contratos +Para consultar un smart contract (leer datos), use el método `SendQuery` para consultar el contrato y devolver el resultado como tipo T (si es posible). +Un ejemplo de cómo consultar un smart contract sería: + +```csharp +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); +``` + +Alternativamente, si desea simplemente construir la consulta y enviarla más tarde, puede usar `QueryContract` para crear un delegado. + +```csharp +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); +``` + +## Desplegar contratos +Si desea desplegar un contrato, puede usar el `ContractDeployer` + +```csharp +ContractDeploymentResult deploymentResult = await ContractDeployer.Deploy(client, wallet, contractBytecodeAsString); +string newlyDeployedContractAddress = deploymentResult.Receipt.contractAddress; +``` \ No newline at end of file diff --git a/es/sdk/unity/quickstart.mdx b/es/sdk/unity/quickstart.mdx index 9f0b1545..a03f9ff2 100644 --- a/es/sdk/unity/quickstart.mdx +++ b/es/sdk/unity/quickstart.mdx @@ -1,13 +1,13 @@ --- -title: Guía rápida de Unity +title: Inicio rápido description: Documentación de inicio rápido para el SDK de Unity de Sequence. --- - Instale la última versión del SDK de Unity de Sequence desde [OpenUPM](/sdk/unity/installation#openupm), - o utilice la [interfaz del Package Manager de Unity](/sdk/unity/installation#or-using-package-manager-ui) - y use la siguiente URL de Git: `https://github.com/0xsequence/sequence-unity.git?path=/Packages/Sequence-Unity` + Instale la última versión del Unity SDK de Sequence desde [OpenUPM](/sdk/unity/installation#openupm), + o utilice [Unity's Package Manager UI](/sdk/unity/installation#or-using-package-manager-ui) + y use la siguiente URL de Git `https://github.com/0xsequence/sequence-unity.git?path=/Packages/Sequence-Unity` @@ -23,11 +23,15 @@ description: Documentación de inicio rápido para el SDK de Unity de Sequence. - Comience estableciendo una sesión de wallet usando un OTP enviado por correo electrónico. Importe el ejemplo `Setup` desde el Package Manager UI, - lo que colocará un conjunto de plantillas en su proyecto dentro del directorio `Resources/`. - Cree el [Login Boilerplate](/sdk/unity/bootstrap_game#login) para enviar una contraseña de un solo uso al correo electrónico especificado. + Comience verificando si hay una sesión de wallet disponible en el almacenamiento: - Una vez que haya integrado sus primeras funciones, puede continuar con [proveedores de inicio de sesión adicionales](/sdk/unity/onboard/authentication/intro) + ```csharp + bool recovered = await EmbeddedWalletAdapter.GetInstance().TryRecoverWalletFromStorage(); + ``` + + Si eso devuelve `false`, debe pedirle al usuario que inicie sesión. Importe el ejemplo `Setup` desde la interfaz del Package Manager UI, lo que colocará un conjunto de plantillas en su proyecto dentro del directorio `Resources/`. Cree el [Login Boilerplate](/sdk/unity/bootstrap_game#login) para enviar una contraseña de un solo uso al correo electrónico especificado. + + Una vez que haya integrado sus primeras funciones, puede continuar con [proveedores de inicio de sesión adicionales](/sdk/unity/onboard/authentication/intro) como Google, Apple o PlayFab. ```csharp @@ -40,9 +44,9 @@ description: Documentación de inicio rápido para el SDK de Unity de Sequence. - El SDK de Unity de Sequence incluye una variedad de [Boilerplates](/sdk/unity/bootstrap_game) para ayudarte a iniciar tu juego rápidamente. - Una vez que todo esté configurado, puedes crear prefabs para mostrar un Perfil de Jugador, Inventario o Tienda dentro del juego. - Consulta [cómo integrar un Perfil de Jugador.](/sdk/unity/bootstrap_game#player-profile) + El SDK de Unity de Sequence incluye una variedad de [boilerplates](/sdk/unity/bootstrap_game) para ayudarle a iniciar su juego rápidamente. + Cuando todo esté configurado, puede crear prefabs para mostrar el perfil del jugador, el inventario o la tienda dentro del juego. + Vea [cómo integrar un perfil de jugador.](/sdk/unity/bootstrap_game#player-profile) ```csharp BoilerplateFactory.OpenSequencePlayerProfile(parent, wallet, chain); @@ -54,8 +58,8 @@ description: Documentación de inicio rápido para el SDK de Unity de Sequence. - Comience con `EmbeddedWalletAdapter` para iniciar su integración rápidamente con solo unas pocas líneas de código y estará listo para empezar. - Cuando desee personalizar su integración, consulte nuestra otra documentación como [autenticando usuarios](/sdk/unity/onboard/authentication/intro) o [cómo enviar transacciones](/sdk/unity/power/write-to-blockchain). + Comience con `EmbeddedWalletAdapter` para iniciar su integración rápidamente con solo unas líneas de código y estará listo para comenzar. + Cuando quiera personalizar su integración, consulte nuestra documentación sobre [autenticación de usuarios](/sdk/unity/onboard/authentication/intro) o [cómo enviar transacciones.](/sdk/unity/power/write-to-blockchain) ```csharp EmbeddedWalletAdapter adapter = EmbeddedWalletAdapter.GetInstance(); diff --git a/es/sdk/unity/setup.mdx b/es/sdk/unity/setup.mdx index ababde0e..eb31891a 100644 --- a/es/sdk/unity/setup.mdx +++ b/es/sdk/unity/setup.mdx @@ -1,9 +1,9 @@ --- -title: Configuración en Unity +title: Configuración description: Documentación para la configuración del SDK de Unity para la infraestructura de Sequence orientada a juegos web3. --- -# Setup +# Configuración 1. [Configure su Embedded Wallet](/sdk/headless-wallet/quickstart) en el Sequence Builder 2. Descargue el ScriptableObject de configuración de Unity `SequenceConfig.asset` desde la interfaz de Builder diff --git a/ja/sdk/unity/onboard/recovering-sessions.mdx b/ja/sdk/unity/onboard/recovering-sessions.mdx index 1642cd65..dd278638 100644 --- a/ja/sdk/unity/onboard/recovering-sessions.mdx +++ b/ja/sdk/unity/onboard/recovering-sessions.mdx @@ -12,19 +12,39 @@ description: SDK では、一部のプラットフォームでネイティブの 対応プラットフォームや各プラットフォームのセキュアストレージについては下記をご覧ください。これらのシステムの基本的な仕組みや、秘密鍵(またはその他の機密情報)を永続ストレージに保存する際のセキュリティリスクについて十分に理解しておくことが重要です。 -## iOS +## インテグレーション +ウォレットをストレージから復元する方法は2つあります。1つ目は、`EmbeddedWalletAdapter` クラスを使用する方法です。この呼び出しが成功すると、`EmbeddedWalletAdapter` にウォレットインスタンスが格納されます。 + +```csharp +bool recovered = await EmbeddedWalletAdapter.GetInstance().TryRecoverWalletFromStorage(); +``` + +それ以外の場合は、基盤となる `SequenceLogin` クラスを使用してください。 + +```csharp +(bool storageEnabled, IWallet wallet) = await SequenceLogin.GetInstance().TryToRestoreSessionAsync(); +``` + +どちらの場合でも、ウォレットがストレージから復元されたり、サインイン時に作成された際には、`SequenceWallet.OnWalletCreated` イベントを監視できます。 + +## プラットフォームの詳細 + +### エディター +エディターでは、秘密鍵の保存に PlayerPrefs を使用しています。また、セキュアストレージを利用してセッションを復元するには、SequenceConfig で `EditorStoreSessionPrivateKeyInSecureStorage` を有効にする必要があります。このフラグを個別に設定することで、ビルドの挙動を変更せずに両方のフローをテストしやすくなります。エディターでのセキュアストレージは開発用途のみを想定しており、長期的な保存には適していません。 + +### iOS iOS では、[iOS Keychain](https://developer.apple.com/documentation/security/keychain_services?language=objc) を利用しています。 -## MacOS +### MacOS MacOS では、[MacOS Keychain](https://developer.apple.com/documentation/security/keychain_services?language=objc) を利用しています。 -## Windows +### Windows Windows PC では、[Crypto: Next Generation - Data Protection API (CNG DPAPI)](https://learn.microsoft.com/en-us/windows/win32/seccng/cng-dpapi) を利用しています。 -## Web +### Web Web ビルドでは、[PlayerPrefs](https://docs.unity3d.com/ScriptReference/PlayerPrefs.html) を通じて [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) を利用しています。 -## Android +### Android Android ビルドでは、[Android Keystore](https://developer.android.com/privacy-and-security/keystore) を利用しています。 まず最初に、`AndroidKeyBridge.java` プラグインを Assets フォルダにインポートします。これはパッケージマネージャーのサンプルから行うのが最も簡単です。`Android Secure Storage` というサンプルをインポートしてください。 @@ -88,13 +108,10 @@ unityStreamingAssets=**STREAMING_ASSETS** android.enableR8=**MINIFY_WITH_R_EIGHT** ``` -### Troubleshooting +## トラブルシューティング Android でセキュアストレージや Google サインインに問題が発生した場合は、以下のトラブルシューティング手順をお試しください。 - **Google サインイン:** `AndroidManifest.xml` ファイル内の `data android:scheme` の値が、`SequenceConfig.asset` ファイルの `Url Scheme` と一致しているか確認してください。すべて小文字で記載されていることもご確認ください。 - **セキュアストレージ:** `mainTemplate.gradle` で `androidx.security:security-crypto` プラグインが正しく定義されており、他のプラグインや Android Plugin Resolver によって上書きされていないことを確認してください。 - **デモをお試しください:** [デモビルドをインストール](https://drive.google.com/file/d/1rAvnPu56Hj3yDRL32_lr887xt-xMQoYK/view?usp=sharing) し、お使いのデバイスで正常に動作するかご確認ください。 - Unity プロジェクトの設定(AndroidManifest、gradle ファイル、Android プレイヤー設定)を、弊社の [SDK プロジェクト](https://github.com/0xsequence/sequence-unity) と比較してください。 -- **追加のアイデア:** 新しいビルドをインストールする前にアプリをアンインストールする、URL スキームやバンドル ID を変更する、などもお試しください。 - -## エディター -エディター上では、秘密鍵の保存に PlayerPrefs を使用しています。エディター内でセキュアストレージを利用しセッションを復元するには、SequenceConfig で 'EditorStoreSessionPrivateKeyInSecureStorage' を有効にしてください。このフラグを分けていることで、ビルドの挙動を変更せずに両方のフローをテストできます。エディターでのセキュアストレージは開発用途のみであり、長期保存には適していません。 \ No newline at end of file +- **追加のアイデア:** 新しいビルドをインストールする前にアプリをアンインストールする、URL スキームやバンドル ID を変更する、などもお試しください。 \ No newline at end of file diff --git a/ja/sdk/unity/onboard/session-management.mdx b/ja/sdk/unity/onboard/session-management.mdx index bf831c1b..4b56f381 100644 --- a/ja/sdk/unity/onboard/session-management.mdx +++ b/ja/sdk/unity/onboard/session-management.mdx @@ -1,5 +1,5 @@ --- -title: Unity セッション管理 — Sequence ドキュメント +title: セッション管理 --- Sequence API でユーザー認証しセッションを確立した後は、セッション管理のためのさまざまなメソッドが利用できます。 diff --git a/ja/sdk/unity/power/advanced/contracts.mdx b/ja/sdk/unity/power/advanced/contracts.mdx index 2a2a8742..d0db2d05 100644 --- a/ja/sdk/unity/power/advanced/contracts.mdx +++ b/ja/sdk/unity/power/advanced/contracts.mdx @@ -112,6 +112,19 @@ var arg = new Tuple(wallet, amount, data); ### その他の型 Solidityの`string`や`bool`などの基本的なデータ型は、C#でも同じデータ型を使用できます。 +### 返却型 +スマートコントラクトからデータを読み取り、`Contract.SendQuery()` 関数を使用する場合、`string`、`BigInteger`、`bool` などの単純な戻り値型には TType をそのまま使うことができます。構造体のような複雑な戻り値型の場合は、`object[]` を使用し、値を手動で C# の構造体にパースしてください。 + +```csharp +// Let's consider a struct with the following variables: SomeStruct { address value1; uint256 value2; } +object[] structValues = Contract.SendQuery("SomeFunction"); + +SomeStruct newStruct = new SomeStruct() { + Value1 = new Address(structValues[0].ToString()), + Value2 = BigInteger.Parse(structValues[1].ToString()) +} +``` + ## コントラクトのクエリ スマートコントラクトからデータを読み取る場合は、`SendQuery`メソッドを使ってコントラクトにクエリを送り、結果を型Tで受け取ります。 スマートコントラクトをクエリする例は以下の通りです。 diff --git a/ja/sdk/unity/quickstart.mdx b/ja/sdk/unity/quickstart.mdx index bffe9974..c52ff2b5 100644 --- a/ja/sdk/unity/quickstart.mdx +++ b/ja/sdk/unity/quickstart.mdx @@ -1,13 +1,11 @@ --- -title: Unity クイックスタート +title: クイックスタート description: Sequence Unity SDK のクイックスタートドキュメントです。 --- - Sequence Unity SDK の最新版を [OpenUPM](/sdk/unity/installation#openupm) からインストールするか、 - [Unity のパッケージマネージャー UI](/sdk/unity/installation#or-using-package-manager-ui) を利用し、 - 以下の Git URL を指定してください:`https://github.com/0xsequence/sequence-unity.git?path=/Packages/Sequence-Unity` + [OpenUPM](/sdk/unity/installation#openupm) から Sequence の Unity SDK の最新版をインストールするか、[Unity の Package Manager UI](/sdk/unity/installation#or-using-package-manager-ui) を利用して、以下の Git URL を使用してください: `https://github.com/0xsequence/sequence-unity.git?path=/Packages/Sequence-Unity` @@ -23,11 +21,15 @@ description: Sequence Unity SDK のクイックスタートドキュメントで - まず、メールのワンタイムパスワード(OTP)を使ってウォレットセッションを確立します。パッケージマネージャー UI から `Setup` サンプルをインポートすると、 - プロジェクトの `Resources/` ディレクトリに一式のボイラープレートが配置されます。 - [ログイン用ボイラープレート](/sdk/unity/bootstrap_game#login) を作成し、指定したメールアドレスにワンタイムパスワードを送信できるようにします。 + まず、ストレージからウォレットセッションが利用可能かどうかを確認してください。 - 最初の機能が統合できたら、Google、Apple、PlayFab などの[追加ログインプロバイダー](/sdk/unity/onboard/authentication/intro)にも対応できます。 + ```csharp + bool recovered = await EmbeddedWalletAdapter.GetInstance().TryRecoverWalletFromStorage(); + ``` + + もし `false` が返ってきた場合は、ユーザーにサインインを促してください。Package Manager UI から `Setup` サンプルをインポートすると、プロジェクトの `Resources/` ディレクトリに一連のボイラープレートが配置されます。[ログイン用ボイラープレート](/sdk/unity/bootstrap_game#login) を作成し、指定したメールアドレスにワンタイムパスワードを送信できるようにしましょう。 + + 最初の機能を統合できたら、[追加のログインプロバイダー](/sdk/unity/onboard/authentication/intro)(Google、Apple、PlayFabなど)も利用できます。 ```csharp BoilerplateFactory.OpenSequenceLoginWindow(parent); @@ -39,8 +41,8 @@ description: Sequence Unity SDK のクイックスタートドキュメントで - Sequence Unity SDK には、ゲーム開発をすぐに始められるように様々な[ボイラープレート](/sdk/unity/bootstrap_game)が用意されています。 - 設定が完了したら、プレイヤープロフィールやインベントリ、ゲーム内ショップを表示するプレハブを作成できます。 + SequenceのUnity SDKには、ゲームを素早く始めるためのさまざまな[ボイラープレート](/sdk/unity/bootstrap_game)が用意されています。 + 設定が完了したら、プレイヤープロフィールやインベントリ、ゲーム内ショップを表示するプレハブを作成できます。 [プレイヤープロフィールの統合方法](/sdk/unity/bootstrap_game#player-profile)もご覧ください。 ```csharp @@ -53,8 +55,8 @@ description: Sequence Unity SDK のクイックスタートドキュメントで - `EmbeddedWalletAdapter` を使えば、数行のコードで素早く統合を始めることができ、すぐに利用を開始できます。 - さらにカスタマイズしたい場合は、[ユーザー認証について](/sdk/unity/onboard/authentication/intro) や [トランザクション送信方法](/sdk/unity/power/write-to-blockchain) など、他のドキュメントもご覧ください。 + `EmbeddedWalletAdapter`を使えば、数行のコードで素早く統合を始められます。 + さらにカスタマイズしたい場合は、[ユーザー認証](/sdk/unity/onboard/authentication/intro)や[トランザクション送信方法](/sdk/unity/power/write-to-blockchain)など、他のドキュメントもご参照ください。 ```csharp EmbeddedWalletAdapter adapter = EmbeddedWalletAdapter.GetInstance(); diff --git a/ja/sdk/unity/setup.mdx b/ja/sdk/unity/setup.mdx index 110ff673..9f1b5a77 100644 --- a/ja/sdk/unity/setup.mdx +++ b/ja/sdk/unity/setup.mdx @@ -1,5 +1,5 @@ --- -title: Unity セットアップ +title: セットアップ description: Sequence インフラストラクチャスタックを利用した web3 ゲーム向け Unity SDK セットアップのドキュメントです。 --- diff --git a/sdk/unity/onboard/recovering-sessions.mdx b/sdk/unity/onboard/recovering-sessions.mdx index c3235c22..f65c68c8 100644 --- a/sdk/unity/onboard/recovering-sessions.mdx +++ b/sdk/unity/onboard/recovering-sessions.mdx @@ -13,23 +13,45 @@ If you enable `StoreSessionPrivateKeyInSecureStorage` in your `SequenceConfig` S See below the supported platforms and to learn about the platform's secure storage solution - it is important to understand the basics of how these systems work and think carefully about the security implications of storing private keys (or any secret for that matter) in persistent storage. -## iOS +## Integration + +You have two options to recover a wallet from storage. First is to use the `EmbeddedWalletAdapter` class. If this call succeeds, the `EmbeddedWalletAdapter` contains the Wallet instance. + +```csharp +bool recovered = await EmbeddedWalletAdapter.GetInstance().TryRecoverWalletFromStorage(); +``` + +Otherwise, use the underlying `SequenceLogin` class. + +```csharp +(bool storageEnabled, IWallet wallet) = await SequenceLogin.GetInstance().TryToRestoreSessionAsync(); +``` + +In both cases, you can listen to the `SequenceWallet.OnWalletCreated` event whenever a wallet was recovered from storage or created during the sign-in process. + +## Platform Details + +### Editor + +In the editor, we use PlayerPrefs for private key storage. You will also need to enable `EditorStoreSessionPrivateKeyInSecureStorage` in SequenceConfig in order to use secure storage and recover sessions from within the editor. This separate flag makes it easier for you to test both flows without modifying the behaviour of your builds. Secure storage in the editor is for development purposes only and should not be considered secure for long-term storage. + +### iOS On iOS, we leverage the [iOS Keychain](https://developer.apple.com/documentation/security/keychain_services?language=objc). -## MacOS +### MacOS On MacOS, we leverage the [MacOS Keychain](https://developer.apple.com/documentation/security/keychain_services?language=objc). -## Windows +### Windows On Windows PCs, we leverage the [Crypto: Next Generation - Data Protection API (CNG DPAPI)](https://learn.microsoft.com/en-us/windows/win32/seccng/cng-dpapi) -## Web +### Web On Web builds, we leverage [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) via [PlayerPrefs](https://docs.unity3d.com/ScriptReference/PlayerPrefs.html). -## Android +### Android On Android builds, we leverage the [Android Keystore](https://developer.android.com/privacy-and-security/keystore). @@ -94,7 +116,7 @@ unityStreamingAssets=**STREAMING_ASSETS** android.enableR8=**MINIFY_WITH_R_EIGHT** ``` -### Troubleshooting +## Troubleshooting If you run into issues with secure storage or Google Sign-In on Android, go through the following troubleshooting steps. @@ -106,7 +128,3 @@ overwritten by any other plugin or the Android Plugin Resolver. and ensure this build runs fine on your device. - Compare your Unity project settings (AndroidManifest, gradle files, Android player settings) with our [sdk project.](https://github.com/0xsequence/sequence-unity) - **Additional Ideas:** Uninstall your app before installing a new build, change your url scheme or bundle id. - -## Editor - -In the editor, we use PlayerPrefs for private key storage. You will also need to enable 'EditorStoreSessionPrivateKeyInSecureStorage' in SequenceConfig in order to use secure storage and recover sessions from within the editor. This separate flag makes it easier for you to test both flows without modifying the behaviour of your builds. Secure storage in the editor is for development purposes only and should not be considered secure for long-term storage. diff --git a/sdk/unity/onboard/session-management.mdx b/sdk/unity/onboard/session-management.mdx index 63cf4916..734d102d 100644 --- a/sdk/unity/onboard/session-management.mdx +++ b/sdk/unity/onboard/session-management.mdx @@ -1,5 +1,5 @@ --- -title: Unity Session Management — Sequence Docs +title: Session Management --- Once you've authenticated your user with the Sequence APIs and established a session, there are a number of methods available to you to manage the session. diff --git a/sdk/unity/power/advanced/contracts.mdx b/sdk/unity/power/advanced/contracts.mdx index 5b64e09c..5845dd27 100644 --- a/sdk/unity/power/advanced/contracts.mdx +++ b/sdk/unity/power/advanced/contracts.mdx @@ -116,6 +116,21 @@ var arg = new Tuple(wallet, amount, data); For traditional data types in Solidity like `string` or `bool`, you can use the same data types in C#. +### Return Types + +When you read data from a smart contract and use the `Contract.SendQuery()` function, you can use the TType for +simple return types such as `string` `BigInteger` or `bool`. For complex return types like structs, use an `object[]` and manually parse the values into your C# Struct. + +```csharp +// Let's consider a struct with the following variables: SomeStruct { address value1; uint256 value2; } +object[] structValues = Contract.SendQuery("SomeFunction"); + +SomeStruct newStruct = new SomeStruct() { + Value1 = new Address(structValues[0].ToString()), + Value2 = BigInteger.Parse(structValues[1].ToString()) +} +``` + ## 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). diff --git a/sdk/unity/quickstart.mdx b/sdk/unity/quickstart.mdx index dca00b70..66cf5c94 100644 --- a/sdk/unity/quickstart.mdx +++ b/sdk/unity/quickstart.mdx @@ -1,5 +1,5 @@ --- -title: "Unity Quickstart" +title: "Quickstart" description: Quickstart Documentation for Sequence's Unity SDK. --- @@ -21,7 +21,13 @@ and use the following Git URL `https://github.com/0xsequence/sequence-unity.git? Place this file in the root of a `Resources` folder. - Start by establishing a wallet session using an email OTP. Import the `Setup` Sample from the Package Manager UI + Start by checking if a wallet session is available from storage: + + ```csharp + bool recovered = await EmbeddedWalletAdapter.GetInstance().TryRecoverWalletFromStorage(); + ``` + + If that returns `false` you should ask the user to sign. Import the `Setup` Sample from the Package Manager UI which will place a set of boilerplates into your project in a `Resources/` directory. Create the [Login Boilerplate](/sdk/unity/bootstrap_game#login) to send a one-time password to the specified email address. @@ -37,9 +43,9 @@ and use the following Git URL `https://github.com/0xsequence/sequence-unity.git? -Sequence's Unity SDK includes a variety of [Boilerplates](/sdk/unity/bootstrap_game) to help you quickly start your game. -Once everything is configured, you can create prefabs to display an Player Profile, Inventory, or In-Game Shop. -Checkout [how to integrate a Player Profile.](/sdk/unity/bootstrap_game#player-profile) + Sequence's Unity SDK includes a variety of [Boilerplates](/sdk/unity/bootstrap_game) to help you quickly start your game. + Once everything is configured, you can create prefabs to display an Player Profile, Inventory, or In-Game Shop. + Checkout [how to integrate a Player Profile.](/sdk/unity/bootstrap_game#player-profile) ```csharp BoilerplateFactory.OpenSequencePlayerProfile(parent, wallet, chain); diff --git a/sdk/unity/setup.mdx b/sdk/unity/setup.mdx index 6265133d..72e0a953 100644 --- a/sdk/unity/setup.mdx +++ b/sdk/unity/setup.mdx @@ -1,5 +1,5 @@ --- -title: Unity Setup +title: Setup description: Documentation for Unity SDK setup for the Sequence infrastructure stack for web3 gaming. --- From c8863397bdbc36b1a1e5ae139d38948ebc5a49f4 Mon Sep 17 00:00:00 2001 From: Samuele Agostinelli Date: Thu, 4 Dec 2025 06:12:52 -0500 Subject: [PATCH 05/12] remove mentions of useERC1155SaleContractCheckout due to deprecation (#202) * remove mentions of erc 1155 utility hook due to deprecation * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 202/merge --------- Co-authored-by: github-actions[bot] --- docs.json | 3 - .../hooks/useERC1155SaleContractCheckout.mdx | 142 ---------------- .../wallet-sdk/embedded/guides/checkout.mdx | 42 ----- es/solutions/payments/checkout-sdk.mdx | 24 --- ja/docs.json | 3 - .../hooks/useERC1155SaleContractCheckout.mdx | 142 ---------------- ja/sdk/web/guides/checkout.mdx | 42 ----- .../hooks/useERC1155SaleContractCheckout.mdx | 142 ---------------- .../wallet-sdk/embedded/guides/checkout.mdx | 42 ----- ja/solutions/payments/checkout-sdk.mdx | 30 +--- .../hooks/useERC1155SaleContractCheckout.mdx | 152 ------------------ .../wallet-sdk/embedded/guides/checkout.mdx | 43 ----- solutions/payments/checkout-sdk.mdx | 24 --- 13 files changed, 3 insertions(+), 828 deletions(-) delete mode 100644 es/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx delete mode 100644 ja/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx delete mode 100644 ja/sdk/web/hooks/useERC1155SaleContractCheckout.mdx delete mode 100644 sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx diff --git a/docs.json b/docs.json index c42a0b16..7ecb039b 100644 --- a/docs.json +++ b/docs.json @@ -342,7 +342,6 @@ "pages": [ "sdk/web/checkout-sdk/hooks/useAddFundsModal", "sdk/web/checkout-sdk/hooks/useCheckoutModal", - "sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout", "sdk/web/checkout-sdk/hooks/useSelectPaymentModal", "sdk/web/checkout-sdk/hooks/useSwapModal", "sdk/web/checkout-sdk/hooks/useTransferFundsModal" @@ -1330,7 +1329,6 @@ "pages": [ "ja/sdk/web/checkout-sdk/hooks/useAddFundsModal", "ja/sdk/web/checkout-sdk/hooks/useCheckoutModal", - "ja/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout", "ja/sdk/web/checkout-sdk/hooks/useSelectPaymentModal", "ja/sdk/web/checkout-sdk/hooks/useSwapModal", "ja/sdk/web/checkout-sdk/hooks/useTransferFundsModal" @@ -2314,7 +2312,6 @@ "pages": [ "es/sdk/web/checkout-sdk/hooks/useAddFundsModal", "es/sdk/web/checkout-sdk/hooks/useCheckoutModal", - "es/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout", "es/sdk/web/checkout-sdk/hooks/useSelectPaymentModal", "es/sdk/web/checkout-sdk/hooks/useSwapModal", "es/sdk/web/checkout-sdk/hooks/useTransferFundsModal" diff --git a/es/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx b/es/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx deleted file mode 100644 index 56aa679f..00000000 --- a/es/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: useERC1155SaleContractCheckout -description: Hook para gestionar el checkout del contrato de venta ERC-1155 -sidebarTitle: useERC1155SaleContractCheckout ---- - -## Importar - -```tsx -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' -``` - -## Uso - -```tsx -import { useERC1155SaleContractCheckout } from "@0xsequence/checkout" -import { useAccount } from "wagmi" - -function App() { - const { address: userAddress } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80001, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash) - }, - onError: (error: Error) => { - console.error(error) - }, - }) - - const onClick = () => { - if (!userAddress) { - return - } - openCheckoutModal() - } - - return -} -``` - -## Tipo de retorno: `UseERC1155SaleContractCheckoutReturnType` -El hook retorna un objeto con las siguientes propiedades: - -```tsx -interface UseERC1155SaleContractCheckoutReturnType { - openCheckoutModal: () => void - closeCheckoutModal: () => void - selectPaymentSettings?: SelectPaymentSettings - isLoading: boolean - isError: boolean -} -``` - -### Propiedades - -#### openCheckoutModal -`() => void` - -Función para abrir el modal de checkout con la compra ERC-1155 configurada. - -#### closeCheckoutModal -`() => void` - -Función para cerrar el modal de checkout. - -#### selectPaymentSettings -`SelectPaymentSettings | undefined` - -```tsx -export interface SelectPaymentSettings { - collectibles: Collectible[] - chain: number | string - currencyAddress: string | Hex - price: string - targetContractAddress: string | Hex - txData: Hex - collectionAddress: string | Hex - recipientAddress: string | Hex - approvedSpenderAddress?: string - transactionConfirmations?: number - onSuccess?: (txHash: string) => void - onError?: (error: Error) => void - onClose?: () => void - enableMainCurrencyPayment?: boolean - enableSwapPayments?: boolean - enableTransferFunds?: boolean - creditCardProviders?: string[] - copyrightText?: string - customProviderCallback?: (onSuccess: (txHash: string) => void, onError: (error: Error) => void, onClose: () => void) => void - supplementaryAnalyticsInfo?: SupplementaryAnalyticsInfo -} -``` - -La configuración actual de pago para el modal. - -#### isLoading -`boolean` - -Indica si los datos del contrato aún se están cargando. - -#### isError -`boolean` - -Indica si hubo un error al cargar los datos del contrato. - -## Parámetros -El hook acepta un objeto de configuración con las siguientes propiedades: - -| Parámetro | Tipo | Descripción | -| ------------------- | -------------------------------------------- | ------------------------------------------------------------ | -| `chain` | `number` | ID de cadena donde está desplegado el contrato de venta | -| `contractAddress` | `string` | Dirección del contrato de venta ERC-1155 | -| `wallet` | `string` | Dirección del wallet que recibirá los NFTs | -| `collectionAddress` | `string` | Dirección del contrato de token ERC-1155 | -| `items` | `Array<{tokenId: string, quantity: string}>` | Lista de IDs de token y cantidades a comprar | -| `onSuccess` | `(txnHash: string) => void` | (Opcional) Función callback cuando la transacción es exitosa | -| `onError` | `(error: Error) => void` | (Opcional) Función callback cuando ocurre un error | -| `onClose` | `() => void` | (Opcional) Función callback cuando se cierra el modal | - -## Notas -Este hook simplifica el proceso de compra de tokens ERC-1155 al realizar automáticamente las siguientes acciones: -- Obtener información de precios desde el contrato de venta -- Determinar opciones de pago (cripto, tarjeta de crédito, etc.) -- Generar los datos de transacción adecuados -- Abrir y gestionar el modal de checkout - -## Aviso de Deprecación - - - El hook `useERC1155SaleContractPaymentModal` está obsoleto. Use `useERC1155SaleContractCheckout` en su lugar. - \ No newline at end of file diff --git a/es/sdk/web/wallet-sdk/embedded/guides/checkout.mdx b/es/sdk/web/wallet-sdk/embedded/guides/checkout.mdx index 7eb6ef39..03ce3abf 100644 --- a/es/sdk/web/wallet-sdk/embedded/guides/checkout.mdx +++ b/es/sdk/web/wallet-sdk/embedded/guides/checkout.mdx @@ -55,48 +55,6 @@ Para integrar la función de checkout, siga estos pasos: Ahora que hemos realizado la configuración, veamos cómo usar el modal de checkout para diferentes casos de uso. -## Checkout con un token ERC1155 -Disponemos de funciones utilitarias para tokens ERC1155 que hacen más sencilla la configuración del modal de checkout. - -Aquí hay una configuración con variables de ejemplo: - -```jsx - import { useERC1155SaleContractCheckout } from "@0xsequence/checkout"; - import { useAccount } from "wagmi"; - - const MyComponent = () => { - const { address: userAddress } = useAccount(); - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80002, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash); - }, - onError: (error: Error) => { - console.error(error); - }, - }); - - const onClick = () => { - if (!userAddress) { - return; - } - openCheckoutModal(); - }; - - return ; - }; -``` - ## Contrato personalizado Instanciamos el hook `useSelectPaymentModal` para abrir el modal de checkout y pasar un objeto de configuración. Además, para contratos personalizados, puede especificar un ABI de contrato junto con la codificación de los datos de la llamada; en este caso estamos usando la utilidad `encodeFunctionData` de `ethers` y `viem`. diff --git a/es/solutions/payments/checkout-sdk.mdx b/es/solutions/payments/checkout-sdk.mdx index 1f25d22f..dfd6f9ff 100644 --- a/es/solutions/payments/checkout-sdk.mdx +++ b/es/solutions/payments/checkout-sdk.mdx @@ -43,30 +43,6 @@ export default function App() { } ``` -## Ejemplo: venta primaria de ERC-1155 - -```tsx -import { useAccount } from 'wagmi' -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' - -export function BuyButton() { - const { address } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 137, // destination chainId - contractAddress: '0xSaleContract', // primary sale contract - collectionAddress: '0xERC1155', // collection - wallet: address!, // recipient - items: [{ tokenId: '1', quantity: '1' }], - // Optional: restrict card providers if your integration requires it - // creditCardProviders: ['transak', 'forte'], - onSuccess: (txHash) => console.log('success', txHash), - onError: (err) => console.error(err), - }) - - return -} -``` - ## Ejemplo: llamada personalizada a contrato ```tsx diff --git a/ja/docs.json b/ja/docs.json index c65cad2b..b109a549 100644 --- a/ja/docs.json +++ b/ja/docs.json @@ -244,7 +244,6 @@ "sdk/web/hooks/useChain", "sdk/web/hooks/useCheckoutModal", "sdk/web/hooks/useCheckWaasFeeOptions", - "sdk/web/hooks/useERC1155SaleContractCheckout", "sdk/web/hooks/useGetCoinPrices", "sdk/web/hooks/useGetCollectiblePrices", "sdk/web/hooks/useListAccounts", @@ -1052,7 +1051,6 @@ "ja/sdk/web/hooks/useChain", "ja/sdk/web/hooks/useCheckoutModal", "ja/sdk/web/hooks/useCheckWaasFeeOptions", - "ja/sdk/web/hooks/useERC1155SaleContractCheckout", "ja/sdk/web/hooks/useGetCoinPrices", "ja/sdk/web/hooks/useGetCollectiblePrices", "ja/sdk/web/hooks/useListAccounts", @@ -1877,7 +1875,6 @@ "es/sdk/web/hooks/useChain", "es/sdk/web/hooks/useCheckoutModal", "es/sdk/web/hooks/useCheckWaasFeeOptions", - "es/sdk/web/hooks/useERC1155SaleContractCheckout", "es/sdk/web/hooks/useGetCoinPrices", "es/sdk/web/hooks/useGetCollectiblePrices", "es/sdk/web/hooks/useListAccounts", diff --git a/ja/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx b/ja/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx deleted file mode 100644 index b9a9c9cb..00000000 --- a/ja/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: useERC1155SaleContractCheckout -description: ERC-1155販売コントラクトのチェックアウトを管理するためのフック -sidebarTitle: useERC1155SaleContractCheckout ---- - -## インポート - -```tsx -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' -``` - -## 使い方 - -```tsx -import { useERC1155SaleContractCheckout } from "@0xsequence/checkout" -import { useAccount } from "wagmi" - -function App() { - const { address: userAddress } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80001, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash) - }, - onError: (error: Error) => { - console.error(error) - }, - }) - - const onClick = () => { - if (!userAddress) { - return - } - openCheckoutModal() - } - - return -} -``` - -## 返り値の型: `UseERC1155SaleContractCheckoutReturnType` -このフックは以下のプロパティを持つオブジェクトを返します。 - -```tsx -interface UseERC1155SaleContractCheckoutReturnType { - openCheckoutModal: () => void - closeCheckoutModal: () => void - selectPaymentSettings?: SelectPaymentSettings - isLoading: boolean - isError: boolean -} -``` - -### プロパティ - -#### openCheckoutModal -`() => void` - -設定済みのERC-1155購入でチェックアウトモーダルを開く関数です。 - -#### closeCheckoutModal -`() => void` - -チェックアウトモーダルを閉じる関数です。 - -#### selectPaymentSettings -`SelectPaymentSettings | undefined` - -```tsx -export interface SelectPaymentSettings { - collectibles: Collectible[] - chain: number | string - currencyAddress: string | Hex - price: string - targetContractAddress: string | Hex - txData: Hex - collectionAddress: string | Hex - recipientAddress: string | Hex - approvedSpenderAddress?: string - transactionConfirmations?: number - onSuccess?: (txHash: string) => void - onError?: (error: Error) => void - onClose?: () => void - enableMainCurrencyPayment?: boolean - enableSwapPayments?: boolean - enableTransferFunds?: boolean - creditCardProviders?: string[] - copyrightText?: string - customProviderCallback?: (onSuccess: (txHash: string) => void, onError: (error: Error) => void, onClose: () => void) => void - supplementaryAnalyticsInfo?: SupplementaryAnalyticsInfo -} -``` - -モーダルの現在の支払い設定構成です。 - -#### isLoading -`boolean` - -コントラクトデータがまだ読み込み中かどうか。 - -#### isError -`boolean` - -コントラクトデータの読み込み時にエラーが発生したかどうか。 - -## パラメータ -このフックは、以下のプロパティを持つ設定オブジェクトを受け取ります: - -| パラメータ | 型 | 説明 | -| ------------------- | -------------------------------------------- | ------------------------------ | -| `chain` | `number` | 販売コントラクトがデプロイされているチェーンID | -| `contractAddress` | `string` | ERC-1155販売コントラクトのアドレス | -| `wallet` | `string` | NFTを受け取るウォレットのアドレス | -| `collectionAddress` | `string` | ERC-1155トークンコントラクトのアドレス | -| `items` | `Array<{tokenId: string, quantity: string}>` | 購入するトークンIDと数量の配列。 | -| `onSuccess` | `(txnHash: string) => void` | (オプション)トランザクションが成功した際のコールバック関数 | -| `onError` | `(error: Error) => void` | (オプション)エラー発生時のコールバック関数 | -| `onClose` | `() => void` | (オプション)モーダルが閉じられた際のコールバック関数 | - -## 補足 -このフックは、ERC-1155トークンの購入プロセスを自動化し、以下の作業を簡単にします。 -- 販売コントラクトから価格情報を取得。 -- 支払いオプション(暗号資産、クレジットカードなど)を判定。 -- 適切なトランザクションデータを生成。 -- チェックアウトモーダルの表示と管理。 - -## 非推奨のお知らせ - - - `useERC1155SaleContractPaymentModal`フックは非推奨です。代わりに`useERC1155SaleContractCheckout`をご利用ください。 - \ No newline at end of file diff --git a/ja/sdk/web/guides/checkout.mdx b/ja/sdk/web/guides/checkout.mdx index 37ba76a4..4e3ffe66 100644 --- a/ja/sdk/web/guides/checkout.mdx +++ b/ja/sdk/web/guides/checkout.mdx @@ -55,48 +55,6 @@ Sequence Checkoutを使うと、ユーザーはマーケットプレイスなど セットアップが完了したら、さまざまなユースケースでチェックアウトモーダルを使う方法を見てみましょう。 -## ERC1155トークンでのチェックアウト -ERC1155トークン用の便利なユーティリティ関数があり、チェックアウトモーダルの設定が簡単にできます。 - -以下はサンプル変数を使った設定例です: - -```jsx - import { useERC1155SaleContractCheckout } from "@0xsequence/checkout"; - import { useAccount } from "wagmi"; - - const MyComponent = () => { - const { address: userAddress } = useAccount(); - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80002, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash); - }, - onError: (error: Error) => { - console.error(error); - }, - }); - - const onClick = () => { - if (!userAddress) { - return; - } - openCheckoutModal(); - }; - - return ; - }; -``` - ## カスタムコントラクト `useSelectPaymentModal`フックを使ってチェックアウトモーダルを開き、設定オブジェクトを渡します。カスタムコントラクトの場合は、コントラクトABIやコールデータのエンコードも指定できます(この例では`ethers`や`viem`の`encodeFunctionData`ユーティリティを使用)。 diff --git a/ja/sdk/web/hooks/useERC1155SaleContractCheckout.mdx b/ja/sdk/web/hooks/useERC1155SaleContractCheckout.mdx deleted file mode 100644 index b9a9c9cb..00000000 --- a/ja/sdk/web/hooks/useERC1155SaleContractCheckout.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: useERC1155SaleContractCheckout -description: ERC-1155販売コントラクトのチェックアウトを管理するためのフック -sidebarTitle: useERC1155SaleContractCheckout ---- - -## インポート - -```tsx -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' -``` - -## 使い方 - -```tsx -import { useERC1155SaleContractCheckout } from "@0xsequence/checkout" -import { useAccount } from "wagmi" - -function App() { - const { address: userAddress } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80001, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash) - }, - onError: (error: Error) => { - console.error(error) - }, - }) - - const onClick = () => { - if (!userAddress) { - return - } - openCheckoutModal() - } - - return -} -``` - -## 返り値の型: `UseERC1155SaleContractCheckoutReturnType` -このフックは以下のプロパティを持つオブジェクトを返します。 - -```tsx -interface UseERC1155SaleContractCheckoutReturnType { - openCheckoutModal: () => void - closeCheckoutModal: () => void - selectPaymentSettings?: SelectPaymentSettings - isLoading: boolean - isError: boolean -} -``` - -### プロパティ - -#### openCheckoutModal -`() => void` - -設定済みのERC-1155購入でチェックアウトモーダルを開く関数です。 - -#### closeCheckoutModal -`() => void` - -チェックアウトモーダルを閉じる関数です。 - -#### selectPaymentSettings -`SelectPaymentSettings | undefined` - -```tsx -export interface SelectPaymentSettings { - collectibles: Collectible[] - chain: number | string - currencyAddress: string | Hex - price: string - targetContractAddress: string | Hex - txData: Hex - collectionAddress: string | Hex - recipientAddress: string | Hex - approvedSpenderAddress?: string - transactionConfirmations?: number - onSuccess?: (txHash: string) => void - onError?: (error: Error) => void - onClose?: () => void - enableMainCurrencyPayment?: boolean - enableSwapPayments?: boolean - enableTransferFunds?: boolean - creditCardProviders?: string[] - copyrightText?: string - customProviderCallback?: (onSuccess: (txHash: string) => void, onError: (error: Error) => void, onClose: () => void) => void - supplementaryAnalyticsInfo?: SupplementaryAnalyticsInfo -} -``` - -モーダルの現在の支払い設定構成です。 - -#### isLoading -`boolean` - -コントラクトデータがまだ読み込み中かどうか。 - -#### isError -`boolean` - -コントラクトデータの読み込み時にエラーが発生したかどうか。 - -## パラメータ -このフックは、以下のプロパティを持つ設定オブジェクトを受け取ります: - -| パラメータ | 型 | 説明 | -| ------------------- | -------------------------------------------- | ------------------------------ | -| `chain` | `number` | 販売コントラクトがデプロイされているチェーンID | -| `contractAddress` | `string` | ERC-1155販売コントラクトのアドレス | -| `wallet` | `string` | NFTを受け取るウォレットのアドレス | -| `collectionAddress` | `string` | ERC-1155トークンコントラクトのアドレス | -| `items` | `Array<{tokenId: string, quantity: string}>` | 購入するトークンIDと数量の配列。 | -| `onSuccess` | `(txnHash: string) => void` | (オプション)トランザクションが成功した際のコールバック関数 | -| `onError` | `(error: Error) => void` | (オプション)エラー発生時のコールバック関数 | -| `onClose` | `() => void` | (オプション)モーダルが閉じられた際のコールバック関数 | - -## 補足 -このフックは、ERC-1155トークンの購入プロセスを自動化し、以下の作業を簡単にします。 -- 販売コントラクトから価格情報を取得。 -- 支払いオプション(暗号資産、クレジットカードなど)を判定。 -- 適切なトランザクションデータを生成。 -- チェックアウトモーダルの表示と管理。 - -## 非推奨のお知らせ - - - `useERC1155SaleContractPaymentModal`フックは非推奨です。代わりに`useERC1155SaleContractCheckout`をご利用ください。 - \ No newline at end of file diff --git a/ja/sdk/web/wallet-sdk/embedded/guides/checkout.mdx b/ja/sdk/web/wallet-sdk/embedded/guides/checkout.mdx index 4d56fa0d..21a4592e 100644 --- a/ja/sdk/web/wallet-sdk/embedded/guides/checkout.mdx +++ b/ja/sdk/web/wallet-sdk/embedded/guides/checkout.mdx @@ -55,48 +55,6 @@ Sequence Checkoutを使うと、ユーザーはマーケットプレイスなど セットアップが完了したら、さまざまなユースケースでチェックアウトモーダルを使う方法を見てみましょう。 -## ERC1155トークンでのチェックアウト -ERC1155トークン用の便利なユーティリティ関数があり、チェックアウトモーダルの設定が簡単にできます。 - -以下はサンプル変数を使った設定例です: - -```jsx - import { useERC1155SaleContractCheckout } from "@0xsequence/checkout"; - import { useAccount } from "wagmi"; - - const MyComponent = () => { - const { address: userAddress } = useAccount(); - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80002, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash); - }, - onError: (error: Error) => { - console.error(error); - }, - }); - - const onClick = () => { - if (!userAddress) { - return; - } - openCheckoutModal(); - }; - - return ; - }; -``` - ## カスタムコントラクト `useSelectPaymentModal`フックを使ってチェックアウトモーダルを開き、設定オブジェクトを渡します。カスタムコントラクトの場合は、コントラクトABIやコールデータのエンコードも指定できます(この例では`ethers`や`viem`の`encodeFunctionData`ユーティリティを使用)。 diff --git a/ja/solutions/payments/checkout-sdk.mdx b/ja/solutions/payments/checkout-sdk.mdx index 508446cf..584802d4 100644 --- a/ja/solutions/payments/checkout-sdk.mdx +++ b/ja/solutions/payments/checkout-sdk.mdx @@ -1,7 +1,7 @@ --- -title: "Checkout SDK(NFT向けカード決済)" -description: "@0xsequence/checkout を使って、パートナー(例:Transak、Forte)経由でNFT購入時にクレジット/デビットカード決済を追加できます。" -sidebarTitle: "Checkout SDK" +title: Checkout SDK(NFT向けカード決済) +description: @0xsequence/checkout を使って、パートナー(例:Transak、Forte)経由でNFT購入時にクレジット/デビットカード決済を追加できます。 +sidebarTitle: Checkout SDK --- @@ -43,30 +43,6 @@ export default function App() { } ``` -## 例:ERC-1155の一次販売 - -```tsx -import { useAccount } from 'wagmi' -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' - -export function BuyButton() { - const { address } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 137, // destination chainId - contractAddress: '0xSaleContract', // primary sale contract - collectionAddress: '0xERC1155', // collection - wallet: address!, // recipient - items: [{ tokenId: '1', quantity: '1' }], - // Optional: restrict card providers if your integration requires it - // creditCardProviders: ['transak', 'forte'], - onSuccess: (txHash) => console.log('success', txHash), - onError: (err) => console.error(err), - }) - - return -} -``` - ## 例:カスタムコントラクト呼び出し ```tsx diff --git a/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx b/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx deleted file mode 100644 index f2994802..00000000 --- a/sdk/web/checkout-sdk/hooks/useERC1155SaleContractCheckout.mdx +++ /dev/null @@ -1,152 +0,0 @@ ---- - -title: "useERC1155SaleContractCheckout" -description: Hook for managing the ERC-1155 sale contract checkout -sidebarTitle: useERC1155SaleContractCheckout ---- - -## Import - -```tsx -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' -``` - -## Usage - -```tsx -import { useERC1155SaleContractCheckout } from "@0xsequence/checkout" -import { useAccount } from "wagmi" - -function App() { - const { address: userAddress } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80001, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash) - }, - onError: (error: Error) => { - console.error(error) - }, - }) - - const onClick = () => { - if (!userAddress) { - return - } - openCheckoutModal() - } - - return -} -``` - -## Return Type: `UseERC1155SaleContractCheckoutReturnType` - -The hook returns an object with the following properties: - -```tsx -interface UseERC1155SaleContractCheckoutReturnType { - openCheckoutModal: () => void - closeCheckoutModal: () => void - selectPaymentSettings?: SelectPaymentSettings - isLoading: boolean - isError: boolean -} -``` - -### Properties - -#### openCheckoutModal - -`() => void` - -Function to open the checkout modal with the configured ERC-1155 purchase. - -#### closeCheckoutModal - -`() => void` - -Function to close the checkout modal. - -#### selectPaymentSettings - -`SelectPaymentSettings | undefined` - -```tsx -export interface SelectPaymentSettings { - collectibles: Collectible[] - chain: number | string - currencyAddress: string | Hex - price: string - targetContractAddress: string | Hex - txData: Hex - collectionAddress: string | Hex - recipientAddress: string | Hex - approvedSpenderAddress?: string - transactionConfirmations?: number - onSuccess?: (txHash: string) => void - onError?: (error: Error) => void - onClose?: () => void - enableMainCurrencyPayment?: boolean - enableSwapPayments?: boolean - enableTransferFunds?: boolean - creditCardProviders?: string[] - copyrightText?: string - customProviderCallback?: (onSuccess: (txHash: string) => void, onError: (error: Error) => void, onClose: () => void) => void - supplementaryAnalyticsInfo?: SupplementaryAnalyticsInfo -} -``` - -The current payment settings configuration for the modal. - -#### isLoading - -`boolean` - -Whether the contract data is still loading. - -#### isError - -`boolean` - -Whether there was an error loading the contract data. - -## Parameters - -The hook accepts a configuration object with the following properties: - -| Parameter | Type | Description | -| --------- | ---- | ----------- | -| `chain` | `number` | Chain ID where the sale contract is deployed | -| `contractAddress` | `string` | Address of the ERC-1155 sale contract | -| `wallet` | `string` | Address of the wallet that will receive the NFTs | -| `collectionAddress` | `string` | Address of the ERC-1155 token contract | -| `items` | `Array<{tokenId: string, quantity: string}>` | Array of token IDs and quantities to purchase | -| `onSuccess` | `(txnHash: string) => void` | (Optional) Callback function when the transaction is successful | -| `onError` | `(error: Error) => void` | (Optional) Callback function when an error occurs | -| `onClose` | `() => void` | (Optional) Callback function when the modal is closed | - -## Notes - -This hook simplifies the process of purchasing ERC-1155 tokens by automatically: -- Fetching price information from the sale contract -- Determining payment options (crypto, credit card, etc.) -- Generating the proper transaction data -- Opening and managing the checkout modal - -## Deprecation Notice - - -The `useERC1155SaleContractPaymentModal` hook is deprecated. Use `useERC1155SaleContractCheckout` instead. - - diff --git a/sdk/web/wallet-sdk/embedded/guides/checkout.mdx b/sdk/web/wallet-sdk/embedded/guides/checkout.mdx index 330cf75b..199956f2 100644 --- a/sdk/web/wallet-sdk/embedded/guides/checkout.mdx +++ b/sdk/web/wallet-sdk/embedded/guides/checkout.mdx @@ -57,49 +57,6 @@ const App = () => { Now we have the setup done, let's see how to use the checkout modal for different use cases. -## Checkout with an ERC1155 Token - -We have convenient utility functions for ERC1155 tokens that make it easy to configure the checkout modal. - -Here's a configuration with example variables: - -```jsx - import { useERC1155SaleContractCheckout } from "@0xsequence/checkout"; - import { useAccount } from "wagmi"; - - const MyComponent = () => { - const { address: userAddress } = useAccount(); - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 80002, // chainId of the chain the collectible is on - contractAddress: "0x0327b2f274e04d292e74a06809bcd687c63a4ba4", // address of the contract handling the minting function - wallet: userAddress!, // address of the recipient - collectionAddress: "0x888a322db4b8033bac3ff84412738c096f87f9d0", // address of the collection contract - items: [ - // array of collectibles to purchase - { - tokenId: "0", - quantity: "1", - }, - ], - onSuccess: (txnHash: string) => { - console.log("success!", txnHash); - }, - onError: (error: Error) => { - console.error(error); - }, - }); - - const onClick = () => { - if (!userAddress) { - return; - } - openCheckoutModal(); - }; - - return ; - }; - ``` - ## Custom Contract We instantiate the `useSelectPaymentModal` hook to open the checkout modal and pass a settings object. In addition, for custom contracts, you can specify a contract ABI along with encoding the call data, in this case we are using `ethers` and `viem`'s `encodeFunctionData` utility. diff --git a/solutions/payments/checkout-sdk.mdx b/solutions/payments/checkout-sdk.mdx index 7a5012fd..0ea0ad6d 100644 --- a/solutions/payments/checkout-sdk.mdx +++ b/solutions/payments/checkout-sdk.mdx @@ -43,30 +43,6 @@ export default function App() { } ``` -## Example: ERC-1155 primary sale - -```tsx -import { useAccount } from 'wagmi' -import { useERC1155SaleContractCheckout } from '@0xsequence/checkout' - -export function BuyButton() { - const { address } = useAccount() - const { openCheckoutModal } = useERC1155SaleContractCheckout({ - chain: 137, // destination chainId - contractAddress: '0xSaleContract', // primary sale contract - collectionAddress: '0xERC1155', // collection - wallet: address!, // recipient - items: [{ tokenId: '1', quantity: '1' }], - // Optional: restrict card providers if your integration requires it - // creditCardProviders: ['transak', 'forte'], - onSuccess: (txHash) => console.log('success', txHash), - onError: (err) => console.error(err), - }) - - return -} -``` - ## Example: custom contract call ```tsx From 211c9d81d069f9c19440d4f6585d8bb24b9e35aa Mon Sep 17 00:00:00 2001 From: 0xsequence-bot <50996415+0xsequence-bot@users.noreply.github.com> Date: Thu, 4 Dec 2025 06:13:22 -0500 Subject: [PATCH 06/12] [AUTOMATED] Update files from 0xsequence/marketplace-api (#200) * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml --------- Co-authored-by: VojtechVitek <139342+VojtechVitek@users.noreply.github.com> Co-authored-by: david-littlefarmer <17728576+david-littlefarmer@users.noreply.github.com> --- docs/pages/api/marketplace/rpc.gen.yaml | 184 +----------------------- 1 file changed, 5 insertions(+), 179 deletions(-) diff --git a/docs/pages/api/marketplace/rpc.gen.yaml b/docs/pages/api/marketplace/rpc.gen.yaml index 6c7eb934..ad54741e 100644 --- a/docs/pages/api/marketplace/rpc.gen.yaml +++ b/docs/pages/api/marketplace/rpc.gen.yaml @@ -1,8 +1,8 @@ -# marketplace-api afab9b287fc2f91ef73264982e813474fe3a0fd1 +# marketplace-api 64fd70e599aed1be032c7c511c1421e01697ebf9 # -- -# Code generated by webrpc-gen@v0.31.1 with openapi generator; DO NOT EDIT +# Code generated by webrpc-gen@v0.31.2 with openapi generator; DO NOT EDIT # -# webrpc-gen -service=Marketplace -ignore=@internal -schema=proto/schema/schema.ridl -target=openapi -title=Marketplace Api -servers=https://marketplace-api.sequence.app/amoy;Amoy Marketplace API,https://marketplace-api.sequence.app/apechain;Apechain Marketplace API,https://marketplace-api.sequence.app/apechain-testnet;Apechain-Testnet Marketplace API,https://marketplace-api.sequence.app/arbitrum;Arbitrum Marketplace API,https://marketplace-api.sequence.app/arbitrum-nova;Arbitrum-Nova Marketplace API,https://marketplace-api.sequence.app/arbitrum-sepolia;Arbitrum-Sepolia Marketplace API,https://marketplace-api.sequence.app/arc-testnet;Arc-Testnet Marketplace API,https://marketplace-api.sequence.app/avalanche;Avalanche Marketplace API,https://marketplace-api.sequence.app/avalanche-testnet;Avalanche-Testnet Marketplace API,https://marketplace-api.sequence.app/b3;B3 Marketplace API,https://marketplace-api.sequence.app/b3-sepolia;B3-Sepolia Marketplace API,https://marketplace-api.sequence.app/base;Base Marketplace API,https://marketplace-api.sequence.app/base-sepolia;Base-Sepolia Marketplace API,https://marketplace-api.sequence.app/blast;Blast Marketplace API,https://marketplace-api.sequence.app/blast-sepolia;Blast-Sepolia Marketplace API,https://marketplace-api.sequence.app/bsc;Bsc Marketplace API,https://marketplace-api.sequence.app/bsc-testnet;Bsc-Testnet Marketplace API,https://marketplace-api.sequence.app/etherlink;Etherlink Marketplace API,https://marketplace-api.sequence.app/etherlink-shadownet-testnet;Etherlink-Shadownet-Testnet Marketplace API,https://marketplace-api.sequence.app/etherlink-testnet;Etherlink-Testnet Marketplace API,https://marketplace-api.sequence.app/gnosis;Gnosis Marketplace API,https://marketplace-api.sequence.app/homeverse;Homeverse Marketplace API,https://marketplace-api.sequence.app/homeverse-testnet;Homeverse-Testnet Marketplace API,https://marketplace-api.sequence.app/immutable-zkevm;Immutable-Zkevm Marketplace API,https://marketplace-api.sequence.app/immutable-zkevm-testnet;Immutable-Zkevm-Testnet Marketplace API,https://marketplace-api.sequence.app/incentiv;Incentiv Marketplace API,https://marketplace-api.sequence.app/incentiv-testnet-v2;Incentiv-Testnet-V2 Marketplace API,https://marketplace-api.sequence.app/katana;Katana Marketplace API,https://marketplace-api.sequence.app/mainnet;Mainnet Marketplace API,https://marketplace-api.sequence.app/monad;Monad Marketplace API,https://marketplace-api.sequence.app/monad-testnet;Monad-Testnet Marketplace API,https://marketplace-api.sequence.app/moonbase-alpha;Moonbase-Alpha Marketplace API,https://marketplace-api.sequence.app/moonbeam;Moonbeam Marketplace API,https://marketplace-api.sequence.app/optimism;Optimism Marketplace API,https://marketplace-api.sequence.app/optimism-sepolia;Optimism-Sepolia Marketplace API,https://marketplace-api.sequence.app/polygon;Polygon Marketplace API,https://marketplace-api.sequence.app/polygon-zkevm;Polygon-Zkevm Marketplace API,https://marketplace-api.sequence.app/sandbox-testnet;Sandbox-Testnet Marketplace API,https://marketplace-api.sequence.app/sei;Sei Marketplace API,https://marketplace-api.sequence.app/sei-testnet;Sei-Testnet Marketplace API,https://marketplace-api.sequence.app/sepolia;Sepolia Marketplace API,https://marketplace-api.sequence.app/skale-nebula;Skale-Nebula Marketplace API,https://marketplace-api.sequence.app/skale-nebula-testnet;Skale-Nebula-Testnet Marketplace API,https://marketplace-api.sequence.app/somnia;Somnia Marketplace API,https://marketplace-api.sequence.app/somnia-testnet;Somnia-Testnet Marketplace API,https://marketplace-api.sequence.app/soneium;Soneium Marketplace API,https://marketplace-api.sequence.app/soneium-minato;Soneium-Minato Marketplace API,https://marketplace-api.sequence.app/telos;Telos Marketplace API,https://marketplace-api.sequence.app/telos-testnet;Telos-Testnet Marketplace API,https://marketplace-api.sequence.app/toy-testnet;Toy-Testnet Marketplace API,https://marketplace-api.sequence.app/xai;Xai Marketplace API,https://marketplace-api.sequence.app/xai-sepolia;Xai-Sepolia Marketplace API -securityAnnotation=@auth -securitySchemes={ 'ApiKeyAuth': { 'type': 'apiKey', 'in': 'header', 'description': 'Project access key for authenticating requests, get an access key at https://sequence.build', 'name': 'X-Access-Key' }, } -out=proto/docs/marketplace.gen.yaml +# webrpc-gen -service=Marketplace -ignore=@internal -schema=proto/schema/schema.ridl -target=openapi -title=Marketplace Api -servers=https://marketplace-api.sequence.app/amoy;Amoy Marketplace API,https://marketplace-api.sequence.app/apechain;Apechain Marketplace API,https://marketplace-api.sequence.app/apechain-testnet;Apechain-Testnet Marketplace API,https://marketplace-api.sequence.app/arbitrum;Arbitrum Marketplace API,https://marketplace-api.sequence.app/arbitrum-nova;Arbitrum-Nova Marketplace API,https://marketplace-api.sequence.app/arbitrum-sepolia;Arbitrum-Sepolia Marketplace API,https://marketplace-api.sequence.app/arc-testnet;Arc-Testnet Marketplace API,https://marketplace-api.sequence.app/avalanche;Avalanche Marketplace API,https://marketplace-api.sequence.app/avalanche-testnet;Avalanche-Testnet Marketplace API,https://marketplace-api.sequence.app/b3;B3 Marketplace API,https://marketplace-api.sequence.app/b3-sepolia;B3-Sepolia Marketplace API,https://marketplace-api.sequence.app/base;Base Marketplace API,https://marketplace-api.sequence.app/base-sepolia;Base-Sepolia Marketplace API,https://marketplace-api.sequence.app/blast;Blast Marketplace API,https://marketplace-api.sequence.app/blast-sepolia;Blast-Sepolia Marketplace API,https://marketplace-api.sequence.app/bsc;Bsc Marketplace API,https://marketplace-api.sequence.app/bsc-testnet;Bsc-Testnet Marketplace API,https://marketplace-api.sequence.app/etherlink;Etherlink Marketplace API,https://marketplace-api.sequence.app/etherlink-shadownet-testnet;Etherlink-Shadownet-Testnet Marketplace API,https://marketplace-api.sequence.app/etherlink-testnet;Etherlink-Testnet Marketplace API,https://marketplace-api.sequence.app/gnosis;Gnosis Marketplace API,https://marketplace-api.sequence.app/homeverse;Homeverse Marketplace API,https://marketplace-api.sequence.app/homeverse-testnet;Homeverse-Testnet Marketplace API,https://marketplace-api.sequence.app/hyperevm;Hyperevm Marketplace API,https://marketplace-api.sequence.app/immutable-zkevm;Immutable-Zkevm Marketplace API,https://marketplace-api.sequence.app/immutable-zkevm-testnet;Immutable-Zkevm-Testnet Marketplace API,https://marketplace-api.sequence.app/incentiv;Incentiv Marketplace API,https://marketplace-api.sequence.app/incentiv-testnet-v2;Incentiv-Testnet-V2 Marketplace API,https://marketplace-api.sequence.app/katana;Katana Marketplace API,https://marketplace-api.sequence.app/mainnet;Mainnet Marketplace API,https://marketplace-api.sequence.app/monad;Monad Marketplace API,https://marketplace-api.sequence.app/monad-testnet;Monad-Testnet Marketplace API,https://marketplace-api.sequence.app/moonbase-alpha;Moonbase-Alpha Marketplace API,https://marketplace-api.sequence.app/moonbeam;Moonbeam Marketplace API,https://marketplace-api.sequence.app/optimism;Optimism Marketplace API,https://marketplace-api.sequence.app/optimism-sepolia;Optimism-Sepolia Marketplace API,https://marketplace-api.sequence.app/polygon;Polygon Marketplace API,https://marketplace-api.sequence.app/polygon-zkevm;Polygon-Zkevm Marketplace API,https://marketplace-api.sequence.app/sandbox-testnet;Sandbox-Testnet Marketplace API,https://marketplace-api.sequence.app/sepolia;Sepolia Marketplace API,https://marketplace-api.sequence.app/skale-nebula;Skale-Nebula Marketplace API,https://marketplace-api.sequence.app/skale-nebula-testnet;Skale-Nebula-Testnet Marketplace API,https://marketplace-api.sequence.app/somnia;Somnia Marketplace API,https://marketplace-api.sequence.app/somnia-testnet;Somnia-Testnet Marketplace API,https://marketplace-api.sequence.app/soneium;Soneium Marketplace API,https://marketplace-api.sequence.app/soneium-minato;Soneium-Minato Marketplace API,https://marketplace-api.sequence.app/telos;Telos Marketplace API,https://marketplace-api.sequence.app/telos-testnet;Telos-Testnet Marketplace API,https://marketplace-api.sequence.app/toy-testnet;Toy-Testnet Marketplace API,https://marketplace-api.sequence.app/xai;Xai Marketplace API,https://marketplace-api.sequence.app/xai-sepolia;Xai-Sepolia Marketplace API -securityAnnotation=@auth -securitySchemes={ 'ApiKeyAuth': { 'type': 'apiKey', 'in': 'header', 'description': 'Project access key for authenticating requests, get an access key at https://sequence.build', 'name': 'X-Access-Key' }, } -out=proto/docs/marketplace.gen.yaml openapi: 3.0.0 info: title: 'Marketplace Api' @@ -54,6 +54,8 @@ servers: description: 'Homeverse Marketplace API' - url: 'https://marketplace-api.sequence.app/homeverse-testnet' description: 'Homeverse-Testnet Marketplace API' + - url: 'https://marketplace-api.sequence.app/hyperevm' + description: 'Hyperevm Marketplace API' - url: 'https://marketplace-api.sequence.app/immutable-zkevm' description: 'Immutable-Zkevm Marketplace API' - url: 'https://marketplace-api.sequence.app/immutable-zkevm-testnet' @@ -84,10 +86,6 @@ servers: description: 'Polygon-Zkevm Marketplace API' - url: 'https://marketplace-api.sequence.app/sandbox-testnet' description: 'Sandbox-Testnet Marketplace API' - - url: 'https://marketplace-api.sequence.app/sei' - description: 'Sei Marketplace API' - - url: 'https://marketplace-api.sequence.app/sei-testnet' - description: 'Sei-Testnet Marketplace API' - url: 'https://marketplace-api.sequence.app/sepolia' description: 'Sepolia Marketplace API' - url: 'https://marketplace-api.sequence.app/skale-nebula' @@ -2619,26 +2617,6 @@ components: type: string filter: $ref: '#/components/schemas/CollectiblesFilter' - Marketplace_ListCollectionActivities_Request: - type: object - properties: - chainId: - type: string - contractAddress: - type: string - page: - $ref: '#/components/schemas/Page' - Marketplace_ListCollectibleActivities_Request: - type: object - properties: - chainId: - type: string - contractAddress: - type: string - tokenId: - type: number - page: - $ref: '#/components/schemas/Page' Marketplace_ListCollectiblesWithLowestListing_Request: type: object properties: @@ -2971,26 +2949,6 @@ components: properties: collectible: $ref: '#/components/schemas/CollectibleOrder' - Marketplace_ListCollectionActivities_Response: - type: object - properties: - activities: - type: array - description: '[]Activity' - items: - $ref: '#/components/schemas/Activity' - page: - $ref: '#/components/schemas/Page' - Marketplace_ListCollectibleActivities_Response: - type: object - properties: - activities: - type: array - description: '[]Activity' - items: - $ref: '#/components/schemas/Activity' - page: - $ref: '#/components/schemas/Page' Marketplace_ListCollectiblesWithLowestListing_Response: type: object properties: @@ -5310,138 +5268,6 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcServerPanic' - $ref: '#/components/schemas/ErrorWebrpcInternalError' - $ref: '#/components/schemas/ErrorNotImplemented' - /rpc/Marketplace/ListCollectionActivities: - post: - operationId: Marketplace-ListCollectionActivities - tags: ["Marketplace"] - summary: "Not Implemented" - security: - - Public+: [] - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Marketplace_ListCollectionActivities_Request' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Marketplace_ListCollectionActivities_Response' - '4XX': - description: Client error - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ErrorWebrpcEndpoint' - - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' - - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - - $ref: '#/components/schemas/ErrorUnauthorized' - - $ref: '#/components/schemas/ErrorPermissionDenied' - - $ref: '#/components/schemas/ErrorSessionExpired' - - $ref: '#/components/schemas/ErrorMethodNotFound' - - $ref: '#/components/schemas/ErrorRequestConflict' - - $ref: '#/components/schemas/ErrorAborted' - - $ref: '#/components/schemas/ErrorGeoblocked' - - $ref: '#/components/schemas/ErrorRateLimited' - - $ref: '#/components/schemas/ErrorProjectNotFound' - - $ref: '#/components/schemas/ErrorSecretKeyCorsDisallowed' - - $ref: '#/components/schemas/ErrorAccessKeyNotFound' - - $ref: '#/components/schemas/ErrorAccessKeyMismatch' - - $ref: '#/components/schemas/ErrorInvalidOrigin' - - $ref: '#/components/schemas/ErrorInvalidService' - - $ref: '#/components/schemas/ErrorUnauthorizedUser' - - $ref: '#/components/schemas/ErrorInvalidChain' - - $ref: '#/components/schemas/ErrorQuotaExceeded' - - $ref: '#/components/schemas/ErrorQuotaRateLimit' - - $ref: '#/components/schemas/ErrorNoDefaultKey' - - $ref: '#/components/schemas/ErrorMaxAccessKeys' - - $ref: '#/components/schemas/ErrorAtLeastOneKey' - - $ref: '#/components/schemas/ErrorTimeout' - - $ref: '#/components/schemas/ErrorNotFound' - - $ref: '#/components/schemas/ErrorInvalidArgument' - '5XX': - description: Server error - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ErrorWebrpcBadResponse' - - $ref: '#/components/schemas/ErrorWebrpcServerPanic' - - $ref: '#/components/schemas/ErrorWebrpcInternalError' - - $ref: '#/components/schemas/ErrorNotImplemented' - /rpc/Marketplace/ListCollectibleActivities: - post: - operationId: Marketplace-ListCollectibleActivities - tags: ["Marketplace"] - summary: "Not Implemented" - security: - - Public+: [] - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Marketplace_ListCollectibleActivities_Request' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Marketplace_ListCollectibleActivities_Response' - '4XX': - description: Client error - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ErrorWebrpcEndpoint' - - $ref: '#/components/schemas/ErrorWebrpcRequestFailed' - - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - - $ref: '#/components/schemas/ErrorUnauthorized' - - $ref: '#/components/schemas/ErrorPermissionDenied' - - $ref: '#/components/schemas/ErrorSessionExpired' - - $ref: '#/components/schemas/ErrorMethodNotFound' - - $ref: '#/components/schemas/ErrorRequestConflict' - - $ref: '#/components/schemas/ErrorAborted' - - $ref: '#/components/schemas/ErrorGeoblocked' - - $ref: '#/components/schemas/ErrorRateLimited' - - $ref: '#/components/schemas/ErrorProjectNotFound' - - $ref: '#/components/schemas/ErrorSecretKeyCorsDisallowed' - - $ref: '#/components/schemas/ErrorAccessKeyNotFound' - - $ref: '#/components/schemas/ErrorAccessKeyMismatch' - - $ref: '#/components/schemas/ErrorInvalidOrigin' - - $ref: '#/components/schemas/ErrorInvalidService' - - $ref: '#/components/schemas/ErrorUnauthorizedUser' - - $ref: '#/components/schemas/ErrorInvalidChain' - - $ref: '#/components/schemas/ErrorQuotaExceeded' - - $ref: '#/components/schemas/ErrorQuotaRateLimit' - - $ref: '#/components/schemas/ErrorNoDefaultKey' - - $ref: '#/components/schemas/ErrorMaxAccessKeys' - - $ref: '#/components/schemas/ErrorAtLeastOneKey' - - $ref: '#/components/schemas/ErrorTimeout' - - $ref: '#/components/schemas/ErrorNotFound' - - $ref: '#/components/schemas/ErrorInvalidArgument' - '5XX': - description: Server error - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ErrorWebrpcBadResponse' - - $ref: '#/components/schemas/ErrorWebrpcServerPanic' - - $ref: '#/components/schemas/ErrorWebrpcInternalError' - - $ref: '#/components/schemas/ErrorNotImplemented' /rpc/Marketplace/ListCollectiblesWithLowestListing: post: operationId: Marketplace-ListCollectiblesWithLowestListing From fa862c46c2d92a744d0f499f593d2e7139d821c3 Mon Sep 17 00:00:00 2001 From: 0xsequence-bot <50996415+0xsequence-bot@users.noreply.github.com> Date: Tue, 9 Dec 2025 10:31:23 -0500 Subject: [PATCH 07/12] [AUTOMATED] Update files from 0xsequence/marketplace-api (#203) * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml * [AUTOMATED] Update: proto/docs/marketplace.gen.yaml --------- Co-authored-by: VojtechVitek <139342+VojtechVitek@users.noreply.github.com> Co-authored-by: david-littlefarmer <17728576+david-littlefarmer@users.noreply.github.com> --- docs/pages/api/marketplace/rpc.gen.yaml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/pages/api/marketplace/rpc.gen.yaml b/docs/pages/api/marketplace/rpc.gen.yaml index ad54741e..4bd9ed28 100644 --- a/docs/pages/api/marketplace/rpc.gen.yaml +++ b/docs/pages/api/marketplace/rpc.gen.yaml @@ -1,4 +1,4 @@ -# marketplace-api 64fd70e599aed1be032c7c511c1421e01697ebf9 +# marketplace-api 520fc4ead4f8cc09f6e45f9166ae089b8893599b # -- # Code generated by webrpc-gen@v0.31.2 with openapi generator; DO NOT EDIT # @@ -1834,6 +1834,19 @@ components: type: number verifyingContract: type: string + GenerateBuySellTransactionResponse: + type: object + required: + - steps + - canBeUsedWithTrails + properties: + steps: + type: array + description: '[]Step' + items: + $ref: '#/components/schemas/Step' + canBeUsedWithTrails: + type: boolean CheckoutOptionsMarketplaceOrder: type: object required: @@ -2478,6 +2491,8 @@ components: $ref: '#/components/schemas/AdditionalFee' walletType: $ref: '#/components/schemas/WalletKind' + useWithTrails: + type: boolean Marketplace_GenerateSellTransaction_Request: type: object properties: @@ -2501,6 +2516,8 @@ components: $ref: '#/components/schemas/AdditionalFee' walletType: $ref: '#/components/schemas/WalletKind' + useWithTrails: + type: boolean Marketplace_GenerateListingTransaction_Request: type: object properties: @@ -2882,6 +2899,8 @@ components: Marketplace_GenerateBuyTransaction_Response: type: object properties: + resp: + $ref: '#/components/schemas/GenerateBuySellTransactionResponse' steps: type: array description: '[]Step' @@ -2890,6 +2909,8 @@ components: Marketplace_GenerateSellTransaction_Response: type: object properties: + resp: + $ref: '#/components/schemas/GenerateBuySellTransactionResponse' steps: type: array description: '[]Step' From 27c6443ca41571c630c3bbedfd8c4f8c61e9cc5d Mon Sep 17 00:00:00 2001 From: 0xsequence-bot <50996415+0xsequence-bot@users.noreply.github.com> Date: Thu, 11 Dec 2025 07:26:44 -0500 Subject: [PATCH 08/12] [AUTOMATED] Update relayer OpenAPI docs (#187) * [AUTOMATED] Update: proto/docs/relayer.gen.yaml * [AUTOMATED] Update: proto/docs/relayer.gen.yaml * [AUTOMATED] Update: proto/docs/relayer.gen.yaml * [AUTOMATED] Update: proto/docs/relayer.gen.yaml * [AUTOMATED] Update: proto/docs/relayer.gen.yaml --------- Co-authored-by: pkieltyka <18831+pkieltyka@users.noreply.github.com> Co-authored-by: klaidliadon <5322228+klaidliadon@users.noreply.github.com> --- docs/pages/api/relayer/rpc.gen.yaml | 126 ++++++++++++++++------------ 1 file changed, 74 insertions(+), 52 deletions(-) diff --git a/docs/pages/api/relayer/rpc.gen.yaml b/docs/pages/api/relayer/rpc.gen.yaml index c3307673..a5ade30b 100644 --- a/docs/pages/api/relayer/rpc.gen.yaml +++ b/docs/pages/api/relayer/rpc.gen.yaml @@ -1,8 +1,8 @@ -# sequence-relayer v0.4.1 e3e258b78200357173ed6f66be8ed022a3658c71 +# sequence-relayer v0.4.1 a1109bd15af77d24ec03ba64e31e9ab591ab6be3 # -- -# Code generated by webrpc-gen@v0.26.0 with openapi generator; DO NOT EDIT +# Code generated by webrpc-gen@v0.31.2 with openapi@v0.16.4 generator; DO NOT EDIT # -# webrpc-gen -service=Relayer -match=@public -schema=proto/relayer.ridl -target=openapi -title=Relayer Api -servers=https://amoy-relayer.sequence.app;Amoy Relayer,https://apechain-relayer.sequence.app;Apechain Relayer,https://apechain-testnet-relayer.sequence.app;Apechain-Testnet Relayer,https://arbitrum-relayer.sequence.app;Arbitrum Relayer,https://arbitrum-nova-relayer.sequence.app;Arbitrum-Nova Relayer,https://arbitrum-sepolia-relayer.sequence.app;Arbitrum-Sepolia Relayer,https://avalanche-relayer.sequence.app;Avalanche Relayer,https://avalanche-testnet-relayer.sequence.app;Avalanche-Testnet Relayer,https://b3-relayer.sequence.app;B3 Relayer,https://b3-sepolia-relayer.sequence.app;B3-Sepolia Relayer,https://base-relayer.sequence.app;Base Relayer,https://base-sepolia-relayer.sequence.app;Base-Sepolia Relayer,https://blast-relayer.sequence.app;Blast Relayer,https://blast-sepolia-relayer.sequence.app;Blast-Sepolia Relayer,https://bsc-relayer.sequence.app;Bsc Relayer,https://bsc-testnet-relayer.sequence.app;Bsc-Testnet Relayer,https://etherlink-relayer.sequence.app;Etherlink Relayer,https://etherlink-testnet-relayer.sequence.app;Etherlink-Testnet Relayer,https://gnosis-relayer.sequence.app;Gnosis Relayer,https://homeverse-relayer.sequence.app;Homeverse Relayer,https://homeverse-testnet-relayer.sequence.app;Homeverse-Testnet Relayer,https://immutable-zkevm-relayer.sequence.app;Immutable-Zkevm Relayer,https://immutable-zkevm-testnet-relayer.sequence.app;Immutable-Zkevm-Testnet Relayer,https://incentiv-testnet-v2-relayer.sequence.app;Incentiv-Testnet-V2 Relayer,https://katana-relayer.sequence.app;Katana Relayer,https://laos-relayer.sequence.app;Laos Relayer,https://laos-sigma-testnet-relayer.sequence.app;Laos-Sigma-Testnet Relayer,https://mainnet-relayer.sequence.app;Mainnet Relayer,https://monad-relayer.sequence.app;Monad Relayer,https://monad-testnet-relayer.sequence.app;Monad-Testnet Relayer,https://moonbase-alpha-relayer.sequence.app;Moonbase-Alpha Relayer,https://moonbeam-relayer.sequence.app;Moonbeam Relayer,https://optimism-relayer.sequence.app;Optimism Relayer,https://optimism-sepolia-relayer.sequence.app;Optimism-Sepolia Relayer,https://polygon-relayer.sequence.app;Polygon Relayer,https://polygon-zkevm-relayer.sequence.app;Polygon-Zkevm Relayer,https://rootnet-relayer.sequence.app;Rootnet Relayer,https://rootnet-porcini-relayer.sequence.app;Rootnet-Porcini Relayer,https://sandbox-testnet-relayer.sequence.app;Sandbox-Testnet Relayer,https://sei-relayer.sequence.app;Sei Relayer,https://sei-testnet-relayer.sequence.app;Sei-Testnet Relayer,https://sepolia-relayer.sequence.app;Sepolia Relayer,https://skale-nebula-relayer.sequence.app;Skale-Nebula Relayer,https://skale-nebula-testnet-relayer.sequence.app;Skale-Nebula-Testnet Relayer,https://somnia-relayer.sequence.app;Somnia Relayer,https://somnia-testnet-relayer.sequence.app;Somnia-Testnet Relayer,https://soneium-relayer.sequence.app;Soneium Relayer,https://soneium-minato-relayer.sequence.app;Soneium-Minato Relayer,https://telos-relayer.sequence.app;Telos Relayer,https://telos-testnet-relayer.sequence.app;Telos-Testnet Relayer,https://toy-testnet-relayer.sequence.app;Toy-Testnet Relayer,https://xai-relayer.sequence.app;Xai Relayer,https://xai-sepolia-relayer.sequence.app;Xai-Sepolia Relayer -securityAnnotation=@auth -securitySchemes={ 'ApiKeyAuth': { 'type': 'apiKey', 'in': 'header', 'description': 'Project access key for authenticating requests, get an access key at https://sequence.build', 'name': 'X-Access-Key' }, } -out=proto/docs/relayer.gen.yaml +# webrpc-gen -service=Relayer -match=@public -schema=proto/relayer.ridl -target=openapi@v0.16.4 -title=Relayer Api -servers=https://amoy-relayer.sequence.app;Amoy Relayer,https://apechain-relayer.sequence.app;Apechain Relayer,https://apechain-testnet-relayer.sequence.app;Apechain-Testnet Relayer,https://arbitrum-relayer.sequence.app;Arbitrum Relayer,https://arbitrum-nova-relayer.sequence.app;Arbitrum-Nova Relayer,https://arbitrum-sepolia-relayer.sequence.app;Arbitrum-Sepolia Relayer,https://arc-testnet-relayer.sequence.app;Arc-Testnet Relayer,https://avalanche-relayer.sequence.app;Avalanche Relayer,https://avalanche-testnet-relayer.sequence.app;Avalanche-Testnet Relayer,https://b3-relayer.sequence.app;B3 Relayer,https://b3-sepolia-relayer.sequence.app;B3-Sepolia Relayer,https://base-relayer.sequence.app;Base Relayer,https://base-sepolia-relayer.sequence.app;Base-Sepolia Relayer,https://blast-relayer.sequence.app;Blast Relayer,https://blast-sepolia-relayer.sequence.app;Blast-Sepolia Relayer,https://bsc-relayer.sequence.app;Bsc Relayer,https://bsc-testnet-relayer.sequence.app;Bsc-Testnet Relayer,https://etherlink-relayer.sequence.app;Etherlink Relayer,https://etherlink-shadownet-testnet-relayer.sequence.app;Etherlink-Shadownet-Testnet Relayer,https://etherlink-testnet-relayer.sequence.app;Etherlink-Testnet Relayer,https://gnosis-relayer.sequence.app;Gnosis Relayer,https://homeverse-relayer.sequence.app;Homeverse Relayer,https://homeverse-testnet-relayer.sequence.app;Homeverse-Testnet Relayer,https://hyperevm-relayer.sequence.app;Hyperevm Relayer,https://immutable-zkevm-relayer.sequence.app;Immutable-Zkevm Relayer,https://immutable-zkevm-testnet-relayer.sequence.app;Immutable-Zkevm-Testnet Relayer,https://incentiv-relayer.sequence.app;Incentiv Relayer,https://incentiv-testnet-v2-relayer.sequence.app;Incentiv-Testnet-V2 Relayer,https://katana-relayer.sequence.app;Katana Relayer,https://mainnet-relayer.sequence.app;Mainnet Relayer,https://monad-relayer.sequence.app;Monad Relayer,https://monad-testnet-relayer.sequence.app;Monad-Testnet Relayer,https://moonbase-alpha-relayer.sequence.app;Moonbase-Alpha Relayer,https://moonbeam-relayer.sequence.app;Moonbeam Relayer,https://optimism-relayer.sequence.app;Optimism Relayer,https://optimism-sepolia-relayer.sequence.app;Optimism-Sepolia Relayer,https://polygon-relayer.sequence.app;Polygon Relayer,https://polygon-zkevm-relayer.sequence.app;Polygon-Zkevm Relayer,https://sandbox-testnet-relayer.sequence.app;Sandbox-Testnet Relayer,https://sepolia-relayer.sequence.app;Sepolia Relayer,https://skale-nebula-relayer.sequence.app;Skale-Nebula Relayer,https://skale-nebula-testnet-relayer.sequence.app;Skale-Nebula-Testnet Relayer,https://somnia-relayer.sequence.app;Somnia Relayer,https://somnia-testnet-relayer.sequence.app;Somnia-Testnet Relayer,https://soneium-relayer.sequence.app;Soneium Relayer,https://soneium-minato-relayer.sequence.app;Soneium-Minato Relayer,https://telos-relayer.sequence.app;Telos Relayer,https://telos-testnet-relayer.sequence.app;Telos-Testnet Relayer,https://toy-testnet-relayer.sequence.app;Toy-Testnet Relayer,https://xai-relayer.sequence.app;Xai Relayer,https://xai-sepolia-relayer.sequence.app;Xai-Sepolia Relayer -securityAnnotation=@auth -securitySchemes={ 'ApiKeyAuth': { 'type': 'apiKey', 'in': 'header', 'description': 'Project access key for authenticating requests, get an access key at https://sequence.build', 'name': 'X-Access-Key' }, } -out=proto/docs/relayer.gen.yaml openapi: 3.0.0 info: title: 'Relayer Api' @@ -20,6 +20,8 @@ servers: description: 'Arbitrum-Nova Relayer' - url: 'https://arbitrum-sepolia-relayer.sequence.app' description: 'Arbitrum-Sepolia Relayer' + - url: 'https://arc-testnet-relayer.sequence.app' + description: 'Arc-Testnet Relayer' - url: 'https://avalanche-relayer.sequence.app' description: 'Avalanche Relayer' - url: 'https://avalanche-testnet-relayer.sequence.app' @@ -42,6 +44,8 @@ servers: description: 'Bsc-Testnet Relayer' - url: 'https://etherlink-relayer.sequence.app' description: 'Etherlink Relayer' + - url: 'https://etherlink-shadownet-testnet-relayer.sequence.app' + description: 'Etherlink-Shadownet-Testnet Relayer' - url: 'https://etherlink-testnet-relayer.sequence.app' description: 'Etherlink-Testnet Relayer' - url: 'https://gnosis-relayer.sequence.app' @@ -50,18 +54,18 @@ servers: description: 'Homeverse Relayer' - url: 'https://homeverse-testnet-relayer.sequence.app' description: 'Homeverse-Testnet Relayer' + - url: 'https://hyperevm-relayer.sequence.app' + description: 'Hyperevm Relayer' - url: 'https://immutable-zkevm-relayer.sequence.app' description: 'Immutable-Zkevm Relayer' - url: 'https://immutable-zkevm-testnet-relayer.sequence.app' description: 'Immutable-Zkevm-Testnet Relayer' + - url: 'https://incentiv-relayer.sequence.app' + description: 'Incentiv Relayer' - url: 'https://incentiv-testnet-v2-relayer.sequence.app' description: 'Incentiv-Testnet-V2 Relayer' - url: 'https://katana-relayer.sequence.app' description: 'Katana Relayer' - - url: 'https://laos-relayer.sequence.app' - description: 'Laos Relayer' - - url: 'https://laos-sigma-testnet-relayer.sequence.app' - description: 'Laos-Sigma-Testnet Relayer' - url: 'https://mainnet-relayer.sequence.app' description: 'Mainnet Relayer' - url: 'https://monad-relayer.sequence.app' @@ -80,16 +84,8 @@ servers: description: 'Polygon Relayer' - url: 'https://polygon-zkevm-relayer.sequence.app' description: 'Polygon-Zkevm Relayer' - - url: 'https://rootnet-relayer.sequence.app' - description: 'Rootnet Relayer' - - url: 'https://rootnet-porcini-relayer.sequence.app' - description: 'Rootnet-Porcini Relayer' - url: 'https://sandbox-testnet-relayer.sequence.app' description: 'Sandbox-Testnet Relayer' - - url: 'https://sei-relayer.sequence.app' - description: 'Sei Relayer' - - url: 'https://sei-testnet-relayer.sequence.app' - description: 'Sei-Testnet Relayer' - url: 'https://sepolia-relayer.sequence.app' description: 'Sepolia Relayer' - url: 'https://skale-nebula-relayer.sequence.app' @@ -293,7 +289,7 @@ components: status: type: number example: 500 - ErrorWebrpcClientDisconnected: + ErrorWebrpcClientAborted: type: object required: - error @@ -303,13 +299,13 @@ components: properties: error: type: string - example: "WebrpcClientDisconnected" + example: "WebrpcClientAborted" code: type: number example: -8 msg: type: string - example: "client disconnected" + example: "request aborted by client" cause: type: string status: @@ -600,7 +596,7 @@ components: type: string status: type: number - example: 409 + example: 403 ErrorInvalidOrigin: type: object required: @@ -667,6 +663,28 @@ components: status: type: number example: 403 + ErrorInvalidChain: + type: object + required: + - error + - code + - msg + - status + properties: + error: + type: string + example: "InvalidChain" + code: + type: number + example: 1106 + msg: + type: string + example: "Network not enabled for Access key" + cause: + type: string + status: + type: number + example: 403 ErrorQuotaExceeded: type: object required: @@ -1366,29 +1384,6 @@ components: type: string data: type: string - IntentPrecondition: - type: object - required: - - type - - chainId - - data - properties: - type: - type: string - chainId: - type: string - data: - type: object - IntentSolution: - type: object - required: - - transactions - properties: - transactions: - type: array - description: '[]Transactions' - items: - $ref: '#/components/schemas/Transactions' Transactions: type: object required: @@ -1404,9 +1399,9 @@ components: $ref: '#/components/schemas/Transaction' preconditions: type: array - description: '[]IntentPrecondition' + description: '[]TransactionPrecondition' items: - $ref: '#/components/schemas/IntentPrecondition' + $ref: '#/components/schemas/TransactionPrecondition' Transaction: type: object required: @@ -1429,6 +1424,25 @@ components: type: string data: type: string + TransactionPrecondition: + type: object + required: + - type + - chainId + - ownerAddress + - tokenAddress + - minAmount + properties: + type: + type: string + chainId: + type: number + ownerAddress: + type: string + tokenAddress: + type: string + minAmount: + type: number TxnLogUser: type: object required: @@ -1731,7 +1745,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -1747,6 +1761,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -1797,7 +1812,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -1813,6 +1828,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -1863,7 +1879,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -1879,6 +1895,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -1929,7 +1946,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -1945,6 +1962,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -1995,7 +2013,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -2011,6 +2029,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -2061,7 +2080,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -2077,6 +2096,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -2127,7 +2147,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -2143,6 +2163,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' @@ -2193,7 +2214,7 @@ paths: - $ref: '#/components/schemas/ErrorWebrpcBadRoute' - $ref: '#/components/schemas/ErrorWebrpcBadMethod' - $ref: '#/components/schemas/ErrorWebrpcBadRequest' - - $ref: '#/components/schemas/ErrorWebrpcClientDisconnected' + - $ref: '#/components/schemas/ErrorWebrpcClientAborted' - $ref: '#/components/schemas/ErrorWebrpcStreamLost' - $ref: '#/components/schemas/ErrorUnauthorized' - $ref: '#/components/schemas/ErrorPermissionDenied' @@ -2209,6 +2230,7 @@ paths: - $ref: '#/components/schemas/ErrorInvalidOrigin' - $ref: '#/components/schemas/ErrorInvalidService' - $ref: '#/components/schemas/ErrorUnauthorizedUser' + - $ref: '#/components/schemas/ErrorInvalidChain' - $ref: '#/components/schemas/ErrorQuotaExceeded' - $ref: '#/components/schemas/ErrorQuotaRateLimit' - $ref: '#/components/schemas/ErrorNoDefaultKey' From 10aeccc252c3917fc279b8cd456d1c1413f366db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andy=20Gr=C3=BCning?= Date: Fri, 12 Dec 2025 15:16:31 +0100 Subject: [PATCH 09/12] Unity/Unreal Ecosystem Wallet (#193) * started unity restructure for wallet separation * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * started unreal wallet separation * further unity/unreal restructure * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * more unity/unreal restructure * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * added new unity/unreal boilerplate images * latest unity/unreal updates * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * added unreal warning for different wallet class names between v2/v3 * new unreal ecosystem blockchain interaction structure * removed "Universal" as a section in Unitys bootstrap docs * fixed broken links * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * fixed broken links * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * fixed broken links * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * fixed broken links * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * fixed broken links * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * Auto-update guide cards metadata [skip ci] * fixed session recovery from previous master merge * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * added info for unity embedded wallet boilerplates * added unreal migration docs * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * latest unreal fixes * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge * some changes to re-run the failed test * fixed broken unreal migration link * chore(i18n): update translations [en] Sync file structure, format locales. Branch: 193/merge --------- Co-authored-by: github-actions[bot] --- docs.json | 161 ++++---- ...ing-transaction-heavy-games-with-unity.mdx | 48 +++ es/guides/guide-cards.json | 2 +- es/guides/jelly-forest-unity-guide.mdx | 345 ++++++++++++++++++ es/guides/using-unity-iap-to-sell-nfts.mdx | 115 ++++++ es/sdk/headless-wallet/quickstart.mdx | 2 +- .../ecosystem-wallet/manage-sessions.mdx | 20 +- es/sdk/unity/monetization/checkout-ui.mdx | 30 ++ .../secondary-sales/creating-listings.mdx | 24 ++ .../how-it-works/reading-orders.mdx | 136 +++++++ .../wallets/ecosystem-wallet/bootstrap.mdx | 201 ++++++++++ .../unity/wallets/ecosystem-wallet/setup.mdx | 37 ++ .../embedded-wallet/recovering-sessions.mdx | 26 ++ .../unity/wallets/embedded-wallet/setup.mdx | 96 +++++ es/sdk/unreal/overview.mdx | 23 ++ es/sdk/unreal/v1/introduction.mdx | 37 ++ .../unreal/wallets/ecosystem-wallet/setup.mdx | 37 ++ .../unreal/wallets/embedded-wallet/setup.mdx | 37 ++ .../ecosystem-wallet/unity-quickstart.mdx | 50 +++ .../ecosystem-wallet/unreal-quickstart.mdx | 38 +- .../developers/embedded-wallet/quickstart.mdx | 4 +- ...ing-transaction-heavy-games-with-unity.mdx | 4 +- guides/guide-cards.json | 2 +- guides/jelly-forest-unity-guide.mdx | 2 +- guides/using-unity-iap-to-sell-nfts.mdx | 2 +- images/unity/ecosystem_wallet_login.png | Bin 0 -> 467947 bytes images/unity/ecosystem_wallet_profile.png | Bin 0 -> 466513 bytes .../unity/ecosystem_wallet_transactions.png | Bin 0 -> 521930 bytes images/unreal/call_contract.png | Bin 0 -> 407211 bytes .../unreal/create_embedded_wallet_login.png | Bin 0 -> 256226 bytes .../create_call_data_transaction.png | Bin 0 -> 110317 bytes .../ecosystem/create_contract_transaction.png | Bin 0 -> 120022 bytes .../ecosystem/create_ecosystem_profile.png | Bin 0 -> 258404 bytes .../create_ecosystem_transactions.png | Bin 0 -> 259035 bytes .../create_ecosystem_wallet_login.png | Bin 0 -> 258381 bytes .../ecosystem/create_transaction_batch.png | Bin 0 -> 95497 bytes images/unreal/ecosystem/ecosystem_profile.png | Bin 0 -> 582646 bytes .../ecosystem/ecosystem_transactions.png | Bin 0 -> 602595 bytes images/unreal/ecosystem_wallet_login.png | Bin 0 -> 518257 bytes images/unreal/get_id_token.png | Bin 311108 -> 325282 bytes ...ing-transaction-heavy-games-with-unity.mdx | 4 +- ja/guides/guide-cards.json | 2 +- ja/guides/jelly-forest-unity-guide.mdx | 210 +++++------ ja/guides/using-unity-iap-to-sell-nfts.mdx | 2 +- ja/sdk/headless-wallet/quickstart.mdx | 2 +- ja/sdk/unity/monetization/checkout-ui.mdx | 2 +- .../secondary-sales/creating-listings.mdx | 2 +- .../how-it-works/reading-orders.mdx | 2 +- ja/sdk/unity/sidekick.mdx | 41 --- .../wallets/ecosystem-wallet/bootstrap.mdx | 201 ++++++++++ .../unity/wallets/ecosystem-wallet/setup.mdx | 36 ++ .../embedded-wallet/recovering-sessions.mdx | 26 ++ .../unity/wallets/embedded-wallet/setup.mdx | 95 +++++ .../read-from-blockchain.mdx | 0 ja/sdk/unreal/overview.mdx | 6 +- ja/sdk/unreal/v1/introduction.mdx | 5 +- .../unreal/wallets/ecosystem-wallet/setup.mdx | 37 ++ .../unreal/wallets/embedded-wallet/setup.mdx | 39 ++ .../embedded-wallet}/write-to-blockchain.mdx | 0 .../ecosystem-wallet/unity-quickstart.mdx | 8 +- .../ecosystem-wallet/unreal-quickstart.mdx | 38 +- .../developers/embedded-wallet/quickstart.mdx | 4 +- .../wallets/embedded-wallet/quickstart.mdx | 2 +- sdk/headless-wallet/quickstart.mdx | 2 +- sdk/unity/{power => }/advanced/clients.mdx | 0 sdk/unity/{power => }/advanced/contracts.mdx | 0 .../{power => advanced}/deploy-contracts.mdx | 0 .../{power => }/advanced/introduction.mdx | 0 .../recovering-sessions.mdx | 18 - sdk/unity/{power => }/advanced/tokens.mdx | 0 sdk/unity/{power => }/advanced/transfers.mdx | 0 sdk/unity/{power => }/advanced/wallets.mdx | 0 .../{bootstrap_game.mdx => bootstrap.mdx} | 100 ++++- sdk/unity/ecosystem-wallet/setup.mdx | 33 -- .../{power => indexer}/contract-events.mdx | 0 .../read-from-blockchain.mdx | 0 sdk/unity/monetization/checkout-ui.mdx | 2 +- .../secondary-sales/creating-listings.mdx | 2 +- .../how-it-works/reading-orders.mdx | 2 +- sdk/unity/quickstart.mdx | 80 ---- sdk/unity/setup.mdx | 22 -- sdk/unity/sidekick.mdx | 52 --- sdk/unity/v2-to-v3-upgrade-guide.mdx | 38 -- .../ecosystem-wallet/authentication.mdx | 2 +- .../blockchain-interactions.mdx} | 0 .../ecosystem-wallet/manage-sessions.mdx | 2 +- .../ecosystem-wallet/permissions.mdx | 0 sdk/unity/wallets/ecosystem-wallet/setup.mdx | 36 ++ .../blockchain-interactions.mdx} | 8 +- .../connecting-external-wallets.mdx | 0 .../onboard/authentication/email.mdx | 2 +- .../authentication/federated-accounts.mdx | 2 +- .../onboard/authentication/guest.mdx | 2 +- .../onboard/authentication/intro.mdx | 10 +- .../onboard/authentication/oidc.mdx | 0 .../onboard/authentication/playfab.mdx | 0 .../embedded-wallet}/onboard/wallet-types.mdx | 0 .../embedded-wallet/recovering-sessions.mdx | 28 ++ .../embedded-wallet}/session-management.mdx | 3 +- sdk/unity/wallets/embedded-wallet/setup.mdx | 95 +++++ .../embedded-wallet}/sign-messages.mdx | 0 sdk/unreal/{ => advanced}/migration.mdx | 28 +- .../{power => advanced}/smart-contracts.mdx | 0 .../{bootstrap_game.mdx => bootstrap.mdx} | 54 ++- sdk/unreal/ecosystem-wallet/setup.mdx | 30 -- sdk/unreal/getting_started.mdx | 54 --- .../read-from-blockchain.mdx | 0 sdk/unreal/overview.mdx | 4 +- sdk/unreal/v1/introduction.mdx | 2 +- .../ecosystem-wallet/authentication.mdx | 2 +- .../blockchain-interactions.mdx} | 73 +++- .../ecosystem-wallet/manage-sessions.mdx | 0 .../ecosystem-wallet/permissions.mdx | 0 sdk/unreal/wallets/ecosystem-wallet/setup.mdx | 35 ++ .../blockchain-interactions.mdx} | 8 +- .../guides/epic-auth-guide.mdx | 0 .../guides/marketplace-guide.mdx | 5 + .../embedded-wallet}/guides/shop-guide.mdx | 0 .../guides/social-signin-guide.mdx | 0 .../embedded-wallet}/guides/swaps-guide.mdx | 5 + .../onboarding/authentication.mdx | 15 +- .../onboarding/manage_sessions.mdx | 8 +- .../onboarding/wallet_linking.mdx | 6 +- sdk/unreal/wallets/embedded-wallet/setup.mdx | 40 ++ .../ecosystem-wallet/unity-quickstart.mdx | 6 +- .../ecosystem-wallet/unreal-quickstart.mdx | 6 +- .../developers/embedded-wallet/quickstart.mdx | 2 +- 127 files changed, 2499 insertions(+), 668 deletions(-) create mode 100644 es/guides/building-transaction-heavy-games-with-unity.mdx create mode 100644 es/guides/jelly-forest-unity-guide.mdx create mode 100644 es/guides/using-unity-iap-to-sell-nfts.mdx create mode 100644 es/sdk/unity/monetization/checkout-ui.mdx create mode 100644 es/sdk/unity/monetization/secondary-sales/creating-listings.mdx create mode 100644 es/sdk/unity/monetization/secondary-sales/how-it-works/reading-orders.mdx create mode 100644 es/sdk/unity/wallets/ecosystem-wallet/bootstrap.mdx create mode 100644 es/sdk/unity/wallets/ecosystem-wallet/setup.mdx create mode 100644 es/sdk/unity/wallets/embedded-wallet/recovering-sessions.mdx create mode 100644 es/sdk/unity/wallets/embedded-wallet/setup.mdx create mode 100644 es/sdk/unreal/overview.mdx create mode 100644 es/sdk/unreal/v1/introduction.mdx create mode 100644 es/sdk/unreal/wallets/ecosystem-wallet/setup.mdx create mode 100644 es/sdk/unreal/wallets/embedded-wallet/setup.mdx create mode 100644 es/solutions/wallets/developers/ecosystem-wallet/unity-quickstart.mdx create mode 100644 images/unity/ecosystem_wallet_login.png create mode 100644 images/unity/ecosystem_wallet_profile.png create mode 100644 images/unity/ecosystem_wallet_transactions.png create mode 100644 images/unreal/call_contract.png create mode 100644 images/unreal/create_embedded_wallet_login.png create mode 100644 images/unreal/ecosystem/create_call_data_transaction.png create mode 100644 images/unreal/ecosystem/create_contract_transaction.png create mode 100644 images/unreal/ecosystem/create_ecosystem_profile.png create mode 100644 images/unreal/ecosystem/create_ecosystem_transactions.png create mode 100644 images/unreal/ecosystem/create_ecosystem_wallet_login.png create mode 100644 images/unreal/ecosystem/create_transaction_batch.png create mode 100644 images/unreal/ecosystem/ecosystem_profile.png create mode 100644 images/unreal/ecosystem/ecosystem_transactions.png create mode 100644 images/unreal/ecosystem_wallet_login.png delete mode 100644 ja/sdk/unity/sidekick.mdx create mode 100644 ja/sdk/unity/wallets/ecosystem-wallet/bootstrap.mdx create mode 100644 ja/sdk/unity/wallets/ecosystem-wallet/setup.mdx create mode 100644 ja/sdk/unity/wallets/embedded-wallet/recovering-sessions.mdx create mode 100644 ja/sdk/unity/wallets/embedded-wallet/setup.mdx rename ja/sdk/unreal/{power => indexer}/read-from-blockchain.mdx (100%) create mode 100644 ja/sdk/unreal/wallets/ecosystem-wallet/setup.mdx create mode 100644 ja/sdk/unreal/wallets/embedded-wallet/setup.mdx rename ja/sdk/unreal/{power => wallets/embedded-wallet}/write-to-blockchain.mdx (100%) rename sdk/unity/{power => }/advanced/clients.mdx (100%) rename sdk/unity/{power => }/advanced/contracts.mdx (100%) rename sdk/unity/{power => advanced}/deploy-contracts.mdx (100%) rename sdk/unity/{power => }/advanced/introduction.mdx (100%) rename sdk/unity/{onboard => advanced}/recovering-sessions.mdx (83%) rename sdk/unity/{power => }/advanced/tokens.mdx (100%) rename sdk/unity/{power => }/advanced/transfers.mdx (100%) rename sdk/unity/{power => }/advanced/wallets.mdx (100%) rename sdk/unity/{bootstrap_game.mdx => bootstrap.mdx} (69%) delete mode 100644 sdk/unity/ecosystem-wallet/setup.mdx rename sdk/unity/{power => indexer}/contract-events.mdx (100%) rename sdk/unity/{power => indexer}/read-from-blockchain.mdx (100%) delete mode 100644 sdk/unity/quickstart.mdx delete mode 100644 sdk/unity/setup.mdx delete mode 100644 sdk/unity/sidekick.mdx delete mode 100644 sdk/unity/v2-to-v3-upgrade-guide.mdx rename sdk/unity/{ => wallets}/ecosystem-wallet/authentication.mdx (88%) rename sdk/unity/{ecosystem-wallet/blockchain.mdx => wallets/ecosystem-wallet/blockchain-interactions.mdx} (100%) rename sdk/unity/{ => wallets}/ecosystem-wallet/manage-sessions.mdx (91%) rename sdk/unity/{ => wallets}/ecosystem-wallet/permissions.mdx (100%) create mode 100644 sdk/unity/wallets/ecosystem-wallet/setup.mdx rename sdk/unity/{power/write-to-blockchain.mdx => wallets/embedded-wallet/blockchain-interactions.mdx} (97%) rename sdk/unity/{onboard => wallets/embedded-wallet}/connecting-external-wallets.mdx (100%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/authentication/email.mdx (94%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/authentication/federated-accounts.mdx (93%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/authentication/guest.mdx (74%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/authentication/intro.mdx (83%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/authentication/oidc.mdx (100%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/authentication/playfab.mdx (100%) rename sdk/unity/{ => wallets/embedded-wallet}/onboard/wallet-types.mdx (100%) create mode 100644 sdk/unity/wallets/embedded-wallet/recovering-sessions.mdx rename sdk/unity/{onboard => wallets/embedded-wallet}/session-management.mdx (91%) create mode 100644 sdk/unity/wallets/embedded-wallet/setup.mdx rename sdk/unity/{power => wallets/embedded-wallet}/sign-messages.mdx (100%) rename sdk/unreal/{ => advanced}/migration.mdx (64%) rename sdk/unreal/{power => advanced}/smart-contracts.mdx (100%) rename sdk/unreal/{bootstrap_game.mdx => bootstrap.mdx} (71%) delete mode 100644 sdk/unreal/ecosystem-wallet/setup.mdx delete mode 100644 sdk/unreal/getting_started.mdx rename sdk/unreal/{power => indexer}/read-from-blockchain.mdx (100%) rename sdk/unreal/{ => wallets}/ecosystem-wallet/authentication.mdx (94%) rename sdk/unreal/{ecosystem-wallet/blockchain.mdx => wallets/ecosystem-wallet/blockchain-interactions.mdx} (62%) rename sdk/unreal/{ => wallets}/ecosystem-wallet/manage-sessions.mdx (100%) rename sdk/unreal/{ => wallets}/ecosystem-wallet/permissions.mdx (100%) create mode 100644 sdk/unreal/wallets/ecosystem-wallet/setup.mdx rename sdk/unreal/{power/write-to-blockchain.mdx => wallets/embedded-wallet/blockchain-interactions.mdx} (95%) rename sdk/unreal/{ => wallets/embedded-wallet}/guides/epic-auth-guide.mdx (100%) rename sdk/unreal/{ => wallets/embedded-wallet}/guides/marketplace-guide.mdx (89%) rename sdk/unreal/{ => wallets/embedded-wallet}/guides/shop-guide.mdx (100%) rename sdk/unreal/{ => wallets/embedded-wallet}/guides/social-signin-guide.mdx (100%) rename sdk/unreal/{ => wallets/embedded-wallet}/guides/swaps-guide.mdx (82%) rename sdk/unreal/{ => wallets/embedded-wallet}/onboarding/authentication.mdx (89%) rename sdk/unreal/{ => wallets/embedded-wallet}/onboarding/manage_sessions.mdx (90%) rename sdk/unreal/{ => wallets/embedded-wallet}/onboarding/wallet_linking.mdx (87%) create mode 100644 sdk/unreal/wallets/embedded-wallet/setup.mdx diff --git a/docs.json b/docs.json index 7ecb039b..8a8ce2ff 100644 --- a/docs.json +++ b/docs.json @@ -444,60 +444,52 @@ "group": "Unity", "pages": [ "sdk/unity/overview", - "sdk/unity/quickstart", "sdk/unity/installation", - "sdk/unity/setup", - "sdk/unity/bootstrap_game", + "sdk/unity/bootstrap", { - "group": "Ecosystem Wallet", - "pages": [ - "sdk/unity/ecosystem-wallet/setup", - "sdk/unity/ecosystem-wallet/authentication", - "sdk/unity/ecosystem-wallet/manage-sessions", - "sdk/unity/ecosystem-wallet/permissions", - "sdk/unity/ecosystem-wallet/blockchain" - ] - }, - { - "group": "Onboard", + "group": "Wallets", "pages": [ { - "group": "Authentication", + "group": "Ecosystem Wallet", "pages": [ - "sdk/unity/onboard/authentication/intro", - "sdk/unity/onboard/authentication/email", - "sdk/unity/onboard/authentication/oidc", - "sdk/unity/onboard/authentication/playfab", - "sdk/unity/onboard/authentication/guest", - "sdk/unity/onboard/authentication/federated-accounts" + "sdk/unity/wallets/ecosystem-wallet/setup", + "sdk/unity/wallets/ecosystem-wallet/authentication", + "sdk/unity/wallets/ecosystem-wallet/manage-sessions", + "sdk/unity/wallets/ecosystem-wallet/permissions", + "sdk/unity/wallets/ecosystem-wallet/blockchain-interactions" ] }, - "sdk/unity/onboard/recovering-sessions", - "sdk/unity/onboard/session-management", - "sdk/unity/onboard/connecting-external-wallets" - ] - }, - { - "group": "Power", - "pages": [ - "sdk/unity/power/read-from-blockchain", - "sdk/unity/power/write-to-blockchain", - "sdk/unity/power/sign-messages", - "sdk/unity/power/deploy-contracts", - "sdk/unity/power/contract-events", { - "group": "Advanced Blockchain Interactions", + "group": "Embedded Wallet", "pages": [ - "sdk/unity/power/advanced/introduction", - "sdk/unity/power/advanced/wallets", - "sdk/unity/power/advanced/clients", - "sdk/unity/power/advanced/transfers", - "sdk/unity/power/advanced/contracts", - "sdk/unity/power/advanced/tokens" + "sdk/unity/wallets/embedded-wallet/setup", + { + "group": "Authentication", + "pages": [ + "sdk/unity/wallets/embedded-wallet/onboard/authentication/intro", + "sdk/unity/wallets/embedded-wallet/onboard/authentication/email", + "sdk/unity/wallets/embedded-wallet/onboard/authentication/oidc", + "sdk/unity/wallets/embedded-wallet/onboard/authentication/playfab", + "sdk/unity/wallets/embedded-wallet/onboard/authentication/guest", + "sdk/unity/wallets/embedded-wallet/onboard/authentication/federated-accounts" + ] + }, + "sdk/unity/wallets/embedded-wallet/session-management", + "sdk/unity/wallets/embedded-wallet/recovering-sessions", + "sdk/unity/wallets/embedded-wallet/connecting-external-wallets", + "sdk/unity/wallets/embedded-wallet/blockchain-interactions", + "sdk/unity/wallets/embedded-wallet/sign-messages" ] } ] }, + { + "group": "Indexer", + "pages": [ + "sdk/unity/indexer/read-from-blockchain", + "sdk/unity/indexer/contract-events" + ] + }, { "group": "Monetization", "pages": [ @@ -532,8 +524,19 @@ "sdk/unity/monetization/onboard-user-funds" ] }, - "sdk/unity/sidekick", - "sdk/unity/v2-to-v3-upgrade-guide" + { + "group": "Advanced", + "pages": [ + "sdk/unity/advanced/recovering-sessions", + "sdk/unity/advanced/deploy-contracts", + "sdk/unity/advanced/introduction", + "sdk/unity/advanced/wallets", + "sdk/unity/advanced/clients", + "sdk/unity/advanced/transfers", + "sdk/unity/advanced/contracts", + "sdk/unity/advanced/tokens" + ] + } ] }, { @@ -541,42 +544,50 @@ "pages": [ "sdk/unreal/overview", "sdk/unreal/installation", - "sdk/unreal/getting_started", - "sdk/unreal/bootstrap_game", - "sdk/unreal/migration", + "sdk/unreal/bootstrap", { - "group": "Guides", + "group": "Wallets", "pages": [ - "sdk/unreal/guides/social-signin-guide", - "sdk/unreal/guides/epic-auth-guide", - "sdk/unreal/guides/marketplace-guide", - "sdk/unreal/guides/swaps-guide" - ] - }, - { - "group": "Ecosystem Wallet", - "pages": [ - "sdk/unreal/ecosystem-wallet/setup", - "sdk/unreal/ecosystem-wallet/authentication", - "sdk/unreal/ecosystem-wallet/permissions", - "sdk/unreal/ecosystem-wallet/manage-sessions", - "sdk/unreal/ecosystem-wallet/blockchain" - ] - }, - { - "group": "Onboarding", - "pages": [ - "sdk/unreal/onboarding/authentication", - "sdk/unreal/onboarding/manage_sessions", - "sdk/unreal/onboarding/wallet_linking" + { + "group": "Ecosystem Wallet", + "pages": [ + "sdk/unreal/wallets/ecosystem-wallet/setup", + "sdk/unreal/wallets/ecosystem-wallet/authentication", + "sdk/unreal/wallets/ecosystem-wallet/permissions", + "sdk/unreal/wallets/ecosystem-wallet/manage-sessions", + "sdk/unreal/wallets/ecosystem-wallet/blockchain-interactions" + ] + }, + { + "group": "Embedded Wallet", + "pages": [ + "sdk/unreal/wallets/embedded-wallet/setup", + "sdk/unreal/wallets/embedded-wallet/blockchain-interactions", + { + "group": "Guides", + "pages": [ + "sdk/unreal/wallets/embedded-wallet/guides/social-signin-guide", + "sdk/unreal/wallets/embedded-wallet/guides/epic-auth-guide", + "sdk/unreal/wallets/embedded-wallet/guides/marketplace-guide", + "sdk/unreal/wallets/embedded-wallet/guides/swaps-guide" + ] + }, + { + "group": "Onboarding", + "pages": [ + "sdk/unreal/wallets/embedded-wallet/onboarding/authentication", + "sdk/unreal/wallets/embedded-wallet/onboarding/manage_sessions", + "sdk/unreal/wallets/embedded-wallet/onboarding/wallet_linking" + ] + } + ] + } ] }, { - "group": "Power", + "group": "Indexer", "pages": [ - "sdk/unreal/power/write-to-blockchain", - "sdk/unreal/power/read-from-blockchain", - "sdk/unreal/power/smart-contracts" + "sdk/unreal/indexer/read-from-blockchain" ] }, { @@ -591,9 +602,11 @@ { "group": "Advanced", "pages": [ + "sdk/unreal/advanced/smart-contracts", "sdk/unreal/advanced/utilities", "sdk/unreal/advanced/advanced", - "sdk/unreal/advanced/platforms" + "sdk/unreal/advanced/platforms", + "sdk/unreal/advanced/migration" ] } ] diff --git a/es/guides/building-transaction-heavy-games-with-unity.mdx b/es/guides/building-transaction-heavy-games-with-unity.mdx new file mode 100644 index 00000000..55808e91 --- /dev/null +++ b/es/guides/building-transaction-heavy-games-with-unity.mdx @@ -0,0 +1,48 @@ +--- +title: Creando juegos con muchas transacciones en Unity +description: Algunos juegos guardan el estado del juego con frecuencia. Cuando se trabaja con blockchain, esto puede ser costoso y generar mucha latencia. Esta guía aborda cómo superar estas limitaciones sin afectar la experiencia del usuario final ni incrementar innecesariamente sus gastos operativos. +sidebarTitle: Creando juegos con muchas transacciones en Unity +--- + +## Introducción +A diferencia de otras bases de datos, cada escritura en una blockchain (transacción) tiene un costo en forma de [comisiones de gas](https://ethereum.org/en/developers/docs/gas/). Al crear juegos blockchain/web3, es importante considerar estas comisiones. Aunque [el patrocinio de gas de Sequence](/solutions/builder/gas-sponsorship) simplifica gran parte de la complejidad para sus usuarios finales, como desarrollador de juegos aún debe tener en cuenta algunos aspectos relacionados con las comisiones de gas. + + + Al crear su juego, debe considerar la **_frecuencia_** con la que envía transacciones a la blockchain para mantener los costos de ejecución al mínimo. + + +Una complejidad adicional de trabajar con blockchain, que no existe en todos los sistemas de almacenamiento de datos, es que escribir en la base de datos blockchain (es decir, hacer una transacción) es una operación asíncrona y no instantánea que requiere conexión de red. + + + Las transacciones pueden fallar por varias razones: sin internet, fondos insuficientes, etc. + + +Primero, debe considerar qué propiedades tokenizables (por ejemplo, objetos, potenciadores, desbloqueos, etc.) deberían tokenizarse en la blockchain. + +Luego, piense en los "tipos" de transacciones que su juego realizará. Probablemente pueda agrupar las transacciones en diferentes categorías. Por ejemplo, algunas de estas categorías pueden incluir: recogidas (como recolectar monedas), creación, intercambio, venta, compra, etc. + +Una vez que haya categorizado cada una de sus transacciones, considere las expectativas de sus usuarios finales sobre esas transacciones, así como sus propias expectativas como desarrollador. ¿Cuánta demora es aceptable desde la perspectiva del usuario para que una transacción se procese? ¿Puede asumir que una transacción tendrá éxito para dar retroalimentación instantánea al usuario y, si es así, puede recuperarse en caso de que una transacción falle sin afectar negativamente al jugador o a su negocio? + +El autor de esta guía suele clasificar las transacciones como de alto valor o bajo valor. + +**Las transacciones de alto valor** normalmente requieren confirmación antes de brindar retroalimentación al usuario final. Las transacciones pueden fallar por varias razones (sin internet, gas insuficiente, supuestos inválidos, etc.). Si asumimos que una transacción de alto valor será exitosa y damos retroalimentación inmediata al usuario, pero luego la transacción falla, no podremos recuperarnos sin afectar negativamente al usuario o a nuestro negocio. Considere, por ejemplo, una tienda dentro del juego. Si la transacción de "comprar espada" de un usuario falla, tendríamos que revocar la espada de su cuenta (afectando la experiencia del jugador) o perder el ingreso de la venta (afectando el resultado financiero). Por suerte, la mayoría de las transacciones de alto valor coinciden con actividades donde los usuarios ya están acostumbrados a esperar un poco en juegos tradicionales (no blockchain), como tiendas, creación de objetos, mejoras, etc. + +**Las transacciones de bajo valor** pueden, y a menudo deberían, brindar retroalimentación inmediata al usuario. No es necesario esperar la confirmación de la transacción antes de mostrar la retroalimentación en el juego. Si la transacción falla, normalmente podemos recuperarnos fácilmente sin afectar la experiencia del jugador ni el negocio. Los jugadores suelen estar acostumbrados a recibir retroalimentación instantánea para estas acciones en juegos tradicionales. Por ejemplo: cuando un usuario recoge una moneda en un juego de plataformas (o similar), espera ver reflejada la moneda recolectada en la interfaz de inmediato. Es poco probable que el jugador recuerde el total exacto de monedas en la siguiente sesión y/o es poco probable que esto afecte al desarrollador si almacena localmente las monedas recolectadas y reenvía la transacción cuando se resuelvan los problemas de red (o similar). + +Por último, debe considerar con qué frecuencia su juego realiza transacciones. En algunos juegos, el usuario realiza muchas acciones que afectan el estado del juego en poco tiempo. Imagine enviar una transacción a la blockchain cada vez que Mario recoge una moneda... Los costos se volverían rápidamente prohibitivos, ¡agrupa esas transacciones de bajo valor! + +## ¿Cómo implementar esto con Unity? +Primero, querrá construir un caché local de lo que el usuario tiene en la blockchain. Esto es bastante sencillo: simplemente [lea desde la blockchain](/sdk/unity/indexer/read-from-blockchain) y almacene localmente los balances de tokens del usuario en el formato que le resulte más conveniente. Si está adaptando un juego o prototipo existente que usaba un sistema de almacenamiento local (como PlayerPrefs) o un sistema de almacenamiento remoto (como un [RDBMS](https://en.wikipedia.org/wiki/List_of_relational_database_management_systems)), probablemente ya tenga implementado un caché local y solo necesite crear un adaptador. + +Luego, probablemente querrá aprovechar el `TransactionQueuer` y sus herederos que ofrece el Unity SDK. Los `TransactionQueuer` son altamente configurables y están diseñados para facilitar el desarrollo de juegos donde los jugadores realizan muchas acciones que modifican el estado. Por ejemplo, si su juego implica recolectar muchas monedas (o similares) como transacciones de bajo valor, probablemente le convenga usar el `PermissionedMinterTransactionQueuer` (asumiendo que su función de `mint` tiene permisos, que es lo predeterminado, y está minteando desde un servidor) o el `SequenceWalletTransactionQueuer` (si cualquiera puede mintear). Con estos, puede simplemente poner en cola varias transacciones; estas transacciones se combinarán automáticamente si es posible (por ejemplo, en vez de tener 'mint(amount: 5, tokenId: 11)' y 'mint(amount: 3, tokenId: 11)', se combinarían en 'mint(amount: 8, tokenId: 11)'). Luego, puede hacer que sus transacciones se envíen cada x segundos o cuando se realice una llamada a función, pero no antes de cada y segundos (esto se puede modificar para transacciones de alto valor), etc. Para obtener más información sobre cómo trabajar con el `TransactionQueuer`, consulte [este documento](/sdk/unity/wallets/embedded-wallet/blockchain-interactions#transaction-queuers). + +Por último, debe verificar si sus transacciones fallan y manejar los errores de manera adecuada. + +```csharp +if (transactionReturn is FailedTransactionReturn) { + // Handle the failed transaction +} +``` + +## Ejemplo +Para ver un ejemplo de estos conceptos en acción en nuestro Unity SDK, consulte nuestra [Guía de Jelly Forest](/guides/jelly-forest-unity-guide#5-mint-in-game-tokens-to-the-players-inventory) y [código de ejemplo](https://github.com/0xsequence/sequence-unity-demo/tree/master/Scripts). \ No newline at end of file diff --git a/es/guides/guide-cards.json b/es/guides/guide-cards.json index 6d6b18da..1ccad102 100644 --- a/es/guides/guide-cards.json +++ b/es/guides/guide-cards.json @@ -1 +1 @@ -{"lastUpdated":"2025-09-03T12:15:39.593Z","totalCards":"6","sections":[{"title":"Desarrolladores de videojuegos","cards":[{"title":"Cree un juego móvil con Unity + Sequence","img":"/images/unity/jellyforest-iphone.jpg","href":"/guias/jelly-forest-unity-guia","description":"Aprenda a crear un juego atractivo para iOS y Android que utiliza Sequence Embedded Wallets en segundo plano para habilitar un marketplace integrado y una moneda dentro del juego."},{"title":"Cómo crear un juego con Unreal Engine","img":"/images/guides/overview/unreal-ew-guide.th.png","href":"/guias/unreal-ew-guia","description":"Utilice el SDK de Unreal de Sequence para mostrar información de Embedded Wallet, firmar mensajes y enviar transacciones."},{"title":"Cree un juego Dungeon Crawler con recompensas generadas por IA","img":"/images/guides/treasure-chest/dungeonMinter.th.png","href":"/guias/tesoro-guia","description":"Con este tutorial, cree un laberinto web donde los objetos de caja de recompensas (lootbox) se generan usando IA y se mintean dinámicamente en el wallet universal del jugador."},{"title":"Cree un juego WebGL en Typescript","img":"/images/aviator.th.jpg","href":"/guias/webgl-guia","description":"Siga una guía paso a paso para crear una demo de juego web que utiliza Sequence Embedded Wallet y tokens de logros personalizados dentro del juego."},{"title":"Venda objetos del juego a través de una tienda web","img":"/images/guides/overview/primary-sales.th.jpg","href":"/guias/ventas-primarias","description":"Impulse el crecimiento de su juego vendiendo objetos directamente a sus jugadores. En esta guía, le mostraremos cómo desplegar un contrato de Primary Sale paso a paso usando cualquier moneda personalizada o existente para una tienda web que utiliza objetos del juego de un contrato ERC1155."},{"title":"Compre artículos on-chain en Unity","img":"/images/guides/overview/unity-primary-sales.th.jpg","href":"/guias/unity-ventas-primarias","description":"Esta guía cubre la creación de una Primary Sale con el SDK de Unity de Sequence."},{"title":"Configurar un contrato ERC1155Pack","img":"/images/guides/overview/packs.th.jpg","href":"/guides/packs","description":"Esta guía explica cómo configurar un contrato ERC1155Pack usando Sequence Builder."}]}]} \ No newline at end of file +{"lastUpdated":"2025-12-04T11:16:33.409Z","totalCards":"7","sections":[{"title":"Desarrolladores de videojuegos","cards":[{"title":"Cree un juego móvil con Unity + Sequence","img":"/images/unity/jellyforest-iphone.jpg","href":"/guias/jelly-forest-unity-guia","description":"Aprenda a crear un juego atractivo para iOS y Android que utiliza Sequence Embedded Wallets en segundo plano para habilitar un marketplace integrado y una moneda dentro del juego."},{"title":"Cómo crear un juego con Unreal Engine","img":"/images/guides/overview/unreal-ew-guide.th.png","href":"/guias/unreal-ew-guia","description":"Utilice el SDK de Unreal de Sequence para mostrar información de Embedded Wallet, firmar mensajes y enviar transacciones."},{"title":"Cree un juego Dungeon Crawler con recompensas generadas por IA","img":"/images/guides/treasure-chest/dungeonMinter.th.png","href":"/guias/tesoro-guia","description":"Con este tutorial, cree un laberinto web donde los objetos de caja de recompensas (lootbox) se generan usando IA y se mintean dinámicamente en el wallet universal del jugador."},{"title":"Cree un juego WebGL en Typescript","img":"/images/aviator.th.jpg","href":"/guias/webgl-guia","description":"Siga una guía paso a paso para crear una demo de juego web que utiliza Sequence Embedded Wallet y tokens de logros personalizados dentro del juego."},{"title":"Venda objetos del juego a través de una tienda web","img":"/images/guides/overview/primary-sales.th.jpg","href":"/guias/ventas-primarias","description":"Impulse el crecimiento de su juego vendiendo objetos directamente a sus jugadores. En esta guía, le mostraremos cómo desplegar un contrato de Primary Sale paso a paso usando cualquier moneda personalizada o existente para una tienda web que utiliza objetos del juego de un contrato ERC1155."},{"title":"Compre artículos on-chain en Unity","img":"/images/guides/overview/unity-primary-sales.th.jpg","href":"/guias/unity-ventas-primarias","description":"Esta guía cubre la creación de una Primary Sale con el SDK de Unity de Sequence."},{"title":"Configurar un contrato ERC1155Pack","img":"/images/guides/overview/packs.th.jpg","href":"/guides/packs","description":"Esta guía explica cómo configurar un contrato ERC1155Pack usando Sequence Builder."}]}]} \ No newline at end of file diff --git a/es/guides/jelly-forest-unity-guide.mdx b/es/guides/jelly-forest-unity-guide.mdx new file mode 100644 index 00000000..7d60cba5 --- /dev/null +++ b/es/guides/jelly-forest-unity-guide.mdx @@ -0,0 +1,345 @@ +--- +title: Introducción a Jelly Forest - Guía de juego en Unity +description: Introducción a Jelly Forest - Guía de juego en Unity presenta un juego runner 2D con funciones blockchain como inicio de sesión con redes sociales, mejoras y objetos cosméticos almacenados en un smart contract wallet. +sidebarTitle: Cree un juego en Unity +--- + +Jelly Forest es un juego runner 2D habilitado para blockchain. El juego incluye inicio de sesión con redes sociales, mejoras multinivel (donde los niveles superiores requieren mejoras de nivel inferior como insumos para construir/mintear) y mejoras cosméticas, todo lo cual se almacena en un smart contract wallet no custodial integrado. No hay ventanas emergentes para firmar transacciones ni requisitos de pago de gas para los jugadores. + + +