Skip to content

Instantly share code, notes, and snippets.

@dmdeklerk
Created October 14, 2020 22:30
Show Gist options
  • Save dmdeklerk/f5750f2f16776516008d7be0e70b0c3e to your computer and use it in GitHub Desktop.
Save dmdeklerk/f5750f2f16776516008d7be0e70b0c3e to your computer and use it in GitHub Desktop.
Airgapped broadcast protocol
/**
* Air gapped broadcast protocol for Heat Wallet.
*/
const RECIPIENT_ADDRESS = 0
const RECIPIENT_ADDRESS_TYPE = 1
const BLOCKCHAIN_NUM = 2
const ASSET_TYPE_NUM = 3
const ASSET_ID = 4
const TRANSACTION_TYPE_ID = 5
const TRANSACTION_HEX = 6
const SENDER_ADDRESS = 7
const SENDER_ADDRESS_TYPE = 8
const AMOUNT = 9
const FEE = 10
const MESSAGE = 11
const MESSAGE_IS_PRIVATE = 12
const NONCE = 13
const GASPRICE = 14
const GASLIMIT = 15
const CHAINID = 16
const CHANGE_ADDRESS = 17
const PERIOD = 18
export class BroadcastProtocolBuilder {
private buffer: Array<any> = []
set recipient_address(val:any) { this.buffer[RECIPIENT_ADDRESS] = val }
set recipient_address_type(val:any) { this.buffer[RECIPIENT_ADDRESS_TYPE] = val }
set blockchain_num(val:any) { this.buffer[BLOCKCHAIN_NUM] = val }
set asset_type_num(val:any) { this.buffer[ASSET_TYPE_NUM] = val }
set asset_id(val:any) { this.buffer[ASSET_ID] = val }
set transaction_type_id(val:any) { this.buffer[TRANSACTION_TYPE_ID] = val }
set transaction_hex(val:string) { this.buffer[TRANSACTION_HEX] = val.toUpperCase() }
set sender_address(val:any) { this.buffer[SENDER_ADDRESS] = val }
set sender_address_type(val:any) { this.buffer[SENDER_ADDRESS_TYPE] = val }
set amount(val:any) { this.buffer[AMOUNT] = val }
set fee(val:any) { this.buffer[FEE] = val }
set message(val:any) { this.buffer[MESSAGE] = val }
set message_is_private(val:any) { this.buffer[MESSAGE_IS_PRIVATE] = val ? 1 : 0 }
set nonce(val:any) { this.buffer[NONCE] = val }
set gasprice(val:any) { this.buffer[GASPRICE] = val }
set gaslimit(val:any) { this.buffer[GASLIMIT] = val }
set chainid(val:any) { this.buffer[CHAINID] = val }
set change_address(val:any) { this.buffer[CHANGE_ADDRESS] = val }
set period(val:any) { this.buffer[PERIOD] = val }
public toString(): string {
let str = ''
this.buffer.forEach((val,index) => {
let asString = `${val}`
if (asString.indexOf('/') != -1) {
throw new Error(`Value at index ${index} contains "/" character`)
}
str += `${val}/`
})
return str
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment