SDK
Currently, only the Ethereum Holesky testnet and AO are supported, with plans to gradually expand support to the Ethereum mainnet and other networks in the future.
Overview
The bavo-network-sdk allows developers to utilize BAVO Network, providing trustless and confidential computing capabilities. For more information, visit the Introduction.
Quick Start
Demos
Usage
Installation
Install the package using npm:
bashCopy codenpm install --save @bavolabs/bavo-network-sdk
Import WASM
Add lhe.js
to your HTML file to automatically load the WASM:
htmlCopy code<script type="text/javascript" src="https://bavo-online.s3.ap-northeast-1.amazonaws.com/resources/v2/lhe.js"></script>
If you encounter this browser console error:
vbnetCopy code_stream_writable.js:57 Uncaught ReferenceError: process is not defined
at node_modules/readable-stream/lib/_stream_writable.js (_stream_writable.js:57:18)
Refer to the project documentation using vite.
Getting Started
Utils
Generate Key Generate public-private key pairs to submit tasks and retrieve task results:
javascriptCopy codeimport { Utils } from "@bavolabs/bavo-network-sdk";
// Generate key pair for submitTask() and getTaskResult()
const keyInfo = await new Utils().generateKey();
BavoNetworkContractClient
Import Client
javascriptCopy codeimport { BavoNetworkContractClient } from '@bavolabs/bavo-network-sdk';
Instantiate Client
The constructor for BavoNetworkContractClient
:
javascriptCopy codeconstructor(chainName: ChainName, wallet: any, storageType: StorageType = StorageType.ARSEEDING);
chainName: The blockchain to connect to.
wallet: The wallet used for blockchain interactions.
storageType: Optional. Defaults to
ARSEEDING
.
By default, storageType is set to ARWEAVE for ao
and ARSEEDING for holesky
or ethereum
.
If using ARSEEDING, deposit ETH to EverPay to cover storage and computation costs.
Example
javascriptCopy codeconst chainName = 'holesky';
const storageType = StorageType.ARSEEDING;
const wallet = window.ethereum;
const bavoNetworkClient = new BavoNetworkContractClient(chainName, wallet, storageType);
Upload Data
Upload data to the storage chain:
javascriptCopy codeuploadData(data: Uint8Array, dataTag: CommonObject, priceInfo: PriceInfo, permissionCheckers?: string[], encryptionSchema?: EncryptionSchema): Promise<string>;
Example
javascriptCopy codeconst data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
const dataTag = { 'filename': 'testFileName' };
const priceInfo = { price: '200000000', symbol: 'wAR' };
const dataId = await bavoNetworkClient.uploadData(data, dataTag, priceInfo);
Submit Task
Submit a task to BAVO Network:
javascriptCopy codesubmitTask(taskType: TaskType, dataId: string, dataUserPk: string): Promise<string>;
Example
javascriptCopy codeconst taskId = await bavoNetworkClient.submitTask(TaskType.DATA_SHARING, userDataId, keyInfo.pk);
Get Task Result
Retrieve the result of a task:
javascriptCopy codegetTaskResult(taskId: string, dataUserSk: string, timeout?: number): Promise<Uint8Array>;
Example
javascriptCopy codeconst data = await bavoNetworkClient.getTaskResult(taskId, keyInfo.sk, 20000);
Get Balance and Withdraw Tokens
Get Balance:
javascriptCopy codeconst balance = await bavoNetworkClient.getBalance(address, 'ETH');
Withdraw Tokens:
javascriptCopy codeconst transaction = await bavoNetworkClient.withdrawToken(address, 'ETH', amount);
Types and Enums
KeyInfo
typescriptCopy codetype KeyInfo = {
pk: string; // public key
sk: string; // private key
};
ChainName
typescriptCopy codetype ChainName = 'ao' | 'holesky' | 'ethereum';
StorageType
typescriptCopy codeenum StorageType {
ARWEAVE = "arweave",
ARSEEDING = "arseeding"
}
TaskType
typescriptCopy codeenum TaskType {
DATA_SHARING = 'dataSharing'
}
Solidity: IDataPermission
Developers can implement the IDataPermission
contract to define custom permission-checking logic for data access:
solidityCopy codeinterface IDataPermission {
function isPermitted(address dataUser) external returns (bool);
}
You can find a whitelist example in WhiteListDataPermission.
Last updated