In order to use the sdk please visit https://testnet.salt.space. Once you're on Salt please create or join an Organisation and create an account. To get started with the SDK, check out the Salt class.
import { Salt } from 'salt-sdk';
import { ethers } from 'ethers';
// ARBITRUM SEPOLIA RPC in TESTNET or ARBITRUM ONE RPC in mainnet
const orchestration_network_provider =
new ethers.providers.StaticJsonRpcProvider({
url: '',
skipFetchSetup: true,
});
// EVM NETWORK RPC WHERE YOU WISH TO BROADCAST
const broadcasting_network_provider =
new ethers.providers.StaticJsonRpcProvider({
url: '',
skipFetchSetup: true,
});
const wallet = new ethers.Wallet('');
const signer = wallet.connect(orchestration_network_provider);
const sdk = new Salt({ environment: 'TESTNET' });
await sdk.authenticate(signer);
const orgs = await sdk.getOrganisations();
const accounts = await sdk.getAccounts(orgs[0]._id);
const transactionObj = await sdk.transfer({
accountId: accounts[0].id,
to: '0xaD94c511350Cced6DcffCcC34D36558Db86a42A8',
value: '0.0001',
chainId: broadcasting_network_provider.network.chainId,
decimals: 18,
type: TransferType.Native,
signer: signer,
sendingProvider: broadcasting_network_provider,
});
//subscribe to state transition events
transactionObj.onPropose((data) => console.log(data));
transactionObj.onSign((data) => console.log(data));
transactionObj.onCombine((data) => console.log(data));
transactionObj.onBroadcast((data) => console.log(data));
transactionObj.onEnd((data) => console.log(data));
transactionObj.onTransition(4, 5, (data) =>
console.log('BROADCAST->END:', data)
);
stateDiagram-v2
[*] --> IDLE[0]
IDLE[0] --> PROPOSE[1] : Start Transfer
IDLE[0] --> END[5] : Error Starting Transfer
PROPOSE[1] --> SIGN[2] : Proposal Created
PROPOSE[1] --> END[5] : Policy Breach
SIGN[2] --> COMBINE[3] : collected_signatures >= signature_threshold
SIGN[2] --> END[5] : Error Signing
COMBINE[3] --> BROADCAST[4] : Signatures Combined
COMBINE[3] --> END[5] : Error Combining
BROADCAST[4] --> END[5] : Transaction Broadcasted
END[5] --> [*]