npm install @bnb-chain/greenfield-js-sdk
import {Client} from '@bnb-chain/greenfield-js-sdk'
const client = Client.create(GRPC_URL, GREEN_CHAIN_ID);
The SDK consists of two parts:
- Chain: https://docs.bnbchain.org/greenfield-docs/docs/api/blockchain-rest
- Storage Provider: https://docs.bnbchain.org/greenfield-docs/docs/api/storage-provider-rest
transfer
tx for example:
const transferTx = await client.account.transfer({
fromAddress: address,
toAddress: transferInfo.to,
amount: [
{
denom: 'BNB',
amount: ethers.utils.parseEther(transferInfo.amount).toString(),
},
],
});
// simulate tx
const simulateInfo = await transferTx.simulate({
denom: 'BNB',
});
// broadcast tx
const broadcastRes = await transferTx.broadcast({
denom: 'BNB',
gasLimit: Number(simulateInfo.gasLimit),
gasPrice: simulateInfo.gasPrice,
payer: address,
granter: '',
});
broadcast
use window.ethereum
as signature provider by default.
If you want to use others, you can set signTypedDataCallback
:
// trustwallet:
const broadcastRes = await transferTx.broadcast({
// ...
signTypedDataCallback: async (addr: string, message: string) => {
return await window.trustwallet.request({
method: 'eth_signTypedData_v4',
params: [addr, message],
});
}
});
If you broadcast in Nodejs, you can broadcast a tx by privateKey
:
const broadcastRes = await transferTx.broadcast({
// ...
privateKey: '0x.......'
});
// get account info
await client.account.getAccount(address);
Examples:
https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest
SDK support two authentication type:
- ECDSA: It is usually used on Node.js(Because it need to use a private key)
- EDDSA: It is usually used in a browser
getBucketReadQuota
as example:
// browser:
// generate seed:
const allSps = await getAllSps();
const offchainAuthRes = await client.offchainauth.genOffChainAuthKeyPairAndUpload(
{
sps: allSps,
chainId: GREEN_CHAIN_ID,
expirationMs: 5 * 24 * 60 * 60 * 1000,
domain: window.location.origin,
address: 'your address',
},
provider: 'wallet provider',
);
// request sp api
const bucketQuota = await client.bucket.getBucketReadQuota(
{
bucketName,
},
{
type: 'EDDSA',
seed: offchainAuthRes.seedString,
domain: window.location.origin,
address: 'your address',
},
);
// Node.js:
// request sp api
const bucketQuota = await client.bucket.getBucketReadQuota(
{
bucketName,
},
{
type: 'ECDSA',
privateKey: '0x....'
},
);
It's actually an HTTP request, we use fetch
by default, and if you want to use another http library like axios
, we'll construct it for you as well.
// custom upload object
const { PUT_OBJECT: getPutObjectMetaInfo } = client.spClient.getMetaInfo(endpoint, payload);
const {reqMeta, url} = await getPutObjectMetaInfo(endpoint, params);
axios.put(...)