@ artblocks/ abx- sdk (英语)
用于ABX协议的中性低等TypeScript库——部署,从链条重建,
解决一个符号,验证内容。 它选择没有提供者,没有 UX,和(超越了默认的链式目标)
没有锁链。 每个ABX表面都以此为基础: abx 国 际
上面是外壳, 参考解析器读取它, 竞争的提供者可以导入
同一个公共图书馆。 如果您在编程一次性操作, CLI 通常会更快到
到达——安装 abx skill install 让经纪人来开 到达SDK的时候
构建一个程序:一个服务器,一个薄荷端点,一个预定的任务.
仅以无害环境管理为基础 维姆,需要22.13+节点. 软件包的主要条目是
浏览器安全 捆绑和试验 platform: 'browser' 每一次变化.
安装
npm install @artblocks/abx-sdk viem
import { makePublicClient, ensureFactory, deployOneOfOne } from '@artblocks/abx-sdk';
import { oneOfOneImageAbi } from '@artblocks/abx-sdk/abi';
发送注入模式
每次写回一个 PreparedTx ——未署名,有人可读 summary编号 :fields 一个标志
页 次 SDK从不签名或广播;它需要您提供的一个功能:
type SendTx = (tx: PreparedTx) => Promise<TransactionReceipt>;
每个 deploy*编号 :ensure*编号 :prepare*- 执行功能需要 SendTx 作为争论, 那么如何
交易的签名完全由您决定:
makeHotSender({ wallet, account, publicClient, onEvent? })- 用来装入/热键 绑起 非ce一次(分布式RPC可在发送后短暂服务于一个已过时的计数,因此它跟踪 非本地化而不是重新读取),检测eth_estimateGas无法回想 低(节点还没有看到一个刚刚部署的目标的代码)和重试而不是发送 投出一个键入TxRevertedError- 从不报告被烧伤, 恢复交易为"确认"- 带上你自己的 – 一个浏览器钱包,一个安全/多相流,一个排出后排出队列. 任何东西
表示一个
PreparedTx.data返回 aTransactionReceipt工作时.
顺序 : runPrepared(txs, send) 按顺序发送列表 . batchOps(ops) 崩溃同目标
运行到一个 Multicallable.multicall 交易——多个所有者编辑成为一个签名,
完全或者什么都没有.
工作实例:部署 上传 · 薄荷 · 已读
import {
makePublicClient, makeWalletClient, makeHotSender,
ensureFactory, deployOneOfOne, saltFor, predictClone,
prepareMint, runPrepared, listTokens, reconstructProject, readSaleConfig,
encodeTag, type OneOfOneInitParams,
} from '@artblocks/abx-sdk';
import { resolveBackend, uploadAndLocate } from '@artblocks/abx-storage';
import { zeroAddress, toHex } from 'viem';
const publicClient = makePublicClient({ chainKey: 'base-sepolia' });
const { wallet, account } = makeWalletClient({ chainKey: 'base-sepolia' }); // reads ABX_DEPLOYER_PK
const send = makeHotSender({ wallet, account, publicClient });
// 1. Deploy — resolve (or bootstrap) the chain's trust anchor, then deploy a clone.
const factory = await ensureFactory(publicClient, send, { chainId: 84532 });
const salt = saltFor(account.address); // front-run-proof: reserves the address to this signer
const clone = await predictClone(publicClient, { factory, salt });
// 2. Upload — put the image somewhere fetchable before baking its URL on-chain.
const backend = resolveBackend({ backend: 'ipfs' }); // or 'cloud' / 'arweave' / 'fs'
const bytes = new Uint8Array(/* … read your file … */);
const { locator } = await uploadAndLocate(backend, 'art.png', { bytes, contentType: 'image/png' });
const params: OneOfOneInitParams = {
owner: account.address,
mintTo: zeroAddress, // defer minting to step 3
name: 'My Piece', symbol: 'MYPC',
tokenURIBase: '', tokenURIRenderer: zeroAddress,
contractURIBase: '', contractURIRenderer: zeroAddress,
royaltyReceiver: account.address, royaltyBps: 500,
transferValidator: zeroAddress, // plain ERC-721; see ERC-721C in the site docs to opt in
tokenFields: [
// Bake the uploaded locator on-chain as the `image` field (an ipfs:// URI here; `arweave`/
// `url`/`keccak256` are the other off-chain representations — see the site docs for the choice,
// and `stageFieldContent` to put the bytes fully on-chain instead).
{ field: encodeTag('image'), representation: encodeTag('ipfs'), value: toHex(locator) },
],
contractFields: [],
};
const { txHash } = await deployOneOfOne(send, publicClient, { factory, params, salt });
// 3. Mint — deploy deferred it (mintTo was the zero address), so mint explicitly.
await runPrepared([prepareMint({ contract: clone, to: account.address, chainId: 84532 })], send);
// 4. Read — straight from chain, no indexer required.
const listing = await listTokens(publicClient, clone); // owners, seeds, params
const state = await reconstructProject(publicClient, { // full protocol state
address: clone, fromBlock: (await publicClient.getBlockNumber()) - 100n,
});
encodeTag编号 :decodeTag (从同套件)转出一个字段名像 "image" 输入
bytes32 标记合同所期望的——上面说明的只是这样片段是自成一体的.
通过共享的固定价格薄荷进行销售 prepareConfigureSale + 键 preparePurchase + 键
readSaleConfig(publicClient, minter, clone) ——见: SDK 参考
用于全表面(网络、代码/生成项目、链上内容中转、ERC-721C等).
浏览器的使用
软件包的主要条目(.已经 不只导入节点 绑在地上
platform: 'browser' 并声称清洁 node:* 关于每一变化的决议。 在浏览器中 :
- 过
rpcUrls: [...]明确改为makePublicClient编号 :makeWalletClient没有process.env而SDK从不假设一个. - 以连接的钱包签名( 构建
SendTx更不要说makeHotSender, (中文(简体) ), 它需要当地WalletClient由密钥支撑. - 从不 导入
@artblocks/abx-sdk/node- 子路径是 仅限 地点.env装入寿命 (单位:千美元)loadDotEnv,需求node:fs编号 :node:path它会打破浏览器捆绑。 东道主(CLI、A) 服务器)呼叫loadDotEnv()sDK核心只读到已经包含的内容process.env通过一个小readEnv节点外面是禁区.
SDK唯一看过的签名钥匙 ABX_DEPLOYER_PK (通过) makeWalletClient编号 :
envSigningKey)——并且仅作为 倒计时 当你不通过 privateKey编号 :rpcUrls 当然.
再来
按任务(部署、销售、操作、阅读、嵌入浏览器、与解析器交谈)分列的完整 API 文档 位于 SDK 参考。 。 。 .