tfchain_client_ts
v1.0.0
Published
Typescript api for communicating with threefold grid
Downloads
5
Maintainers
Readme
TF Grid API client
Client provides all the tooling around tfchain and its modules, including creating entities, twins, farms.. etc
Installation
npm install tfgrid-api-client
API Definition
Available methods:
init
inits the client and returns a promise
const Client = require('tfgrid-api-client')
const url = "urlToWebsocket"
const mnemonic = "some words"
const client = new Client(url, mnemonic)
try {
await client.init()
} catch (err) {
return err
}
createEntity
Creates an entity based on following information:
- name: name of the entity.
- countryID: ID of the country where the entity is located
- cityID: ID of the city where the entity is located
- callback: optional callback
const name = 'foobar'
const countryID = 1
const cityID = 1
// This call wont be blocking and will return the block where the tx is included
const block = await client.createEntity(name, countryID, cityID, callback: optional)
console.log(`Transaction included in block with hash: ${block.toHex()}`)
Note: An entity is always linked to a private keypair, only one entity can be created per keypair.
updateEntity
updates an entity based on following information:
- name: name of the entity.
- countryID: ID of the country where the entity is located
- cityID: ID of the city where the entity is located
- callback: optional callback
// This call wont be blocking and will return the block where the tx is included
const block = await client.updateEntity(name, countryID, cityID, callback: optional)
console.log(`Transaction included in block with hash: ${block.toHex()}`)
getEntityByID
Fetches an entity from storage based on an ID.
const entity = await client.getEntityByID(1)
listEntities
Fetches all entities from storage.
const entity = await client.listEntities()
deleteEntity
Deletes the entity linked to the private key.
await client.deleteEntity(callback: optional)
createTwin
Creates a twin based on following information:
- peerID: Yggdrassil peer ID.
- callback: optional callback
const peerID = '2a02:1812:1443:300:7913:de17:4c83:ecb2'
// This call wont be blocking and will return the block where the tx is included
const block = await client.createTwin(peerID, callback: optional)
console.log(`Transaction included in block with hash: ${block.toHex()}`)
Note: A twin is by default anonymous, check addTwinEntity to add an entity to a twin.
getTwinByID
Fetches twin from storage based on an ID.
const twin = await client.getTwinByID(1)
listTwins
Fetches all twins from storage.
const entity = await client.listTwins()
deleteTwin
Deletes a twin from storage based on an ID. Only the creator of this twin can delete this twin.
await client.deleteTwin(1)
addTwinEntity
Add an entity to a twin. The entity that is being added must sign a message composed of the twinID and entityID. Only the twin's owner can add an entity to it's twin.
- entityID: entity ID to add.
- twinID: twin ID to update.
- signature: signature signed by private key of entity
- callback: optional callback
example:
const entityID = 0
const twinID = 0
// the entity that owns this entity can sign this with his private key
const signedMessage = await client.sign(entityID, twinID)
// This call wont be blocking and will return the block where the tx is included
const block = await client.addTwinEntity(twinID, entityID, signedMessage, callback)
console.log(`Transaction included in block with hash: ${block.toHex()}`)
If the signature of the signedMessage
is valid, this entity id will be added to this twin.
removeTwinEntity
Removes an entity from a twin. Only the twin's owner can remove an entity from it's twin.
- entityID: entity ID to remove.
- twinID: twin ID to update.
- callback: optional callback
example:
// This call wont be blocking and will return the block where the tx is included
const block = await client.removeTwinEntity(twinID, entityID, callback)
console.log(`Transaction included in block with hash: ${block.toHex()}`)
sign
Sign an entityID and twinID combination and returns a signed message.
- entityID: entity ID.
- twinID: twin ID.
const signedMessage = await client.sign(entityID, twinID)
vest
Vest an amount of tokens for a specific duration, if the tft price provided is equal to the real tft price. It unlocks the current and previous vesting months.
locked, perBlock, startingBlock, tftPrice
- locked: amount of tokens to lock
- perBlock: amount of tokens that unlock every block (1 block = 6 seconds)
- startingBlock: block number to start the vesting on
- tftPrice: price of tft that will trigger unlock condition (decimal number eg: 0.50)
- callback: optional callback
example:
// This call wont be blocking and will return the block where the tx is included
const block = await client.vest(locked, perBlock, startingBlock, tftPrice, callback)
console.log(`Transaction included in block with hash: ${block.toHex()}`)
getPrice
Fetches the TFT Price.
const price = await client.getPrice()
getBalance
Fetches your account's balance.
const balance = await client.getBalance()
tfStoreGet
Set a value in tf key-value store
await client.tfStoreSet("name", "Ashraf", (res) => {
if (res instanceof Error) {
console.log(res)
}
});
tfStoreGet
console.log(await client.tfStoreGet("name"))
Example callback function
// This call will block until status is Finalized and tx is included in a block and validated
await client.createEntity(name, countryID, cityID, (res) => {
if (res instanceof Error) {
console.log(res)
exit(1)
}
const { events = [], status } = res
console.log(`Current status is ${status.type}`)
if (status.isFinalized) {
console.log(`Transaction included at blockHash ${status.asFinalized}`)
// Loop through Vec<EventRecord> to display all events
events.forEach(({ phase, event: { data, method, section } }) => {
console.log(`\t' ${phase}: ${section}.${method}:: ${data}`)
})
exit(1)
}
})