packages/oo7-substrate/src/storageBond.js
const XXH = require('xxhashjs');
const { SubscriptionBond } = require('./subscriptionBond')
const { VecU8 } = require('./types')
const { stringToBytes, hexToBytes, toLEHex } = require('./utils')
const { decode } = require('./codec');
function storageKey(prefixString, arg) {
let loc = new VecU8([...stringToBytes(prefixString), ...arg]);
return '0x' + toLEHex(XXH.h64(loc.buffer, 0), 8) + toLEHex(XXH.h64(loc.buffer, 1), 8);
}
class StorageBond extends SubscriptionBond {
constructor (prefix, type, args = [], defaultValue = null) {
super('state_storage', [[ storageKey(prefix, args) ]], r => {
let raw = hexToBytes(r.changes[0][1]);
return raw.length > 0 ? decode(raw, type) : defaultValue
})
}
}
module.exports = { storageKey, StorageBond }