@btc-vision/btc-runtime
Version:
Bitcoin Smart Contract Runtime
61 lines (45 loc) • 1.53 kB
text/typescript
import { Blockchain } from '../env';
import { encodePointer } from '../math/abi';
import { Address } from '../types/Address';
import { u256 } from '@btc-vision/as-bignum/assembly';
import { EMPTY_BUFFER } from '../math/bytes';
export class AddressMemoryMap {
public pointer: u16;
constructor(
pointer: u16,
) {
this.pointer = pointer;
}
public setAsUint8Array(key: Address, value: Uint8Array): this {
const keyHash: Uint8Array = this.encodePointer(key);
Blockchain.setStorageAt(keyHash, value);
return this;
}
public set(key: Address, value: u256): this {
return this.setAsUint8Array(key, value.toUint8Array(true));
}
public getAsUint8Array(key: Address): Uint8Array {
const keyHash: Uint8Array = this.encodePointer(key);
return Blockchain.getStorageAt(keyHash);
}
public get(address: Address): u256 {
const resp = this.getAsUint8Array(address);
return u256.fromUint8ArrayBE(resp);
}
public has(key: Address): bool {
const keyHash: Uint8Array = this.encodePointer(key);
return Blockchain.hasStorageAt(keyHash);
}
public delete(key: Address): bool {
this.setAsUint8Array(key, EMPTY_BUFFER);
return true;
}
public clear(): void {
throw new Error('Method not implemented.');
}
private encodePointer(key: Address): Uint8Array {
return encodePointer(this.pointer, key.slice(0, 30), true);
}
}