41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
|
// @flow
|
||
|
import * as BufferLayout from 'buffer-layout';
|
||
|
|
||
|
import type {Blockhash} from './blockhash';
|
||
|
import * as Layout from './layout';
|
||
|
import {PublicKey} from './publickey';
|
||
|
|
||
|
/**
|
||
|
* See https://github.com/solana-labs/solana/blob/0ea2843ec9cdc517572b8e62c959f41b55cf4453/sdk/src/nonce_state.rs#L29-L32
|
||
|
*
|
||
|
* @private
|
||
|
*/
|
||
|
const NonceAccountLayout = BufferLayout.struct([
|
||
|
BufferLayout.u32('state'),
|
||
|
Layout.publicKey('authorizedPubkey'),
|
||
|
Layout.publicKey('hash'),
|
||
|
]);
|
||
|
|
||
|
/**
|
||
|
* NonceAccount class
|
||
|
*/
|
||
|
export class NonceAccount {
|
||
|
authorizedPubkey: PublicKey;
|
||
|
nonce: Blockhash;
|
||
|
|
||
|
/**
|
||
|
* Deserialize NonceAccount from the account data.
|
||
|
*
|
||
|
* @param buffer account data
|
||
|
* @return NonceAccount
|
||
|
*/
|
||
|
static fromAccountData(buffer: Buffer): NonceAccount {
|
||
|
const nonceAccount = NonceAccountLayout.decode(buffer, 0);
|
||
|
nonceAccount.authorizedPubkey = new PublicKey(
|
||
|
nonceAccount.authorizedPubkey,
|
||
|
);
|
||
|
nonceAccount.nonce = new PublicKey(nonceAccount.nonce).toString();
|
||
|
return nonceAccount;
|
||
|
}
|
||
|
}
|