solana/web3.js/src/nonce-account.js

48 lines
1.3 KiB
JavaScript
Raw Normal View History

2020-01-02 17:54:43 -08:00
// @flow
import * as BufferLayout from 'buffer-layout';
import type {Blockhash} from './blockhash';
import * as Layout from './layout';
import {PublicKey} from './publickey';
import type {FeeCalculator} from './fee-calculator';
import {FeeCalculatorLayout} from './fee-calculator';
2020-01-02 17:54:43 -08:00
/**
* See https://github.com/solana-labs/solana/blob/0ea2843ec9cdc517572b8e62c959f41b55cf4453/sdk/src/nonce_state.rs#L29-L32
*
* @private
*/
const NonceAccountLayout = BufferLayout.struct([
BufferLayout.u32('version'),
2020-01-02 17:54:43 -08:00
BufferLayout.u32('state'),
Layout.publicKey('authorizedPubkey'),
Layout.publicKey('nonce'),
BufferLayout.struct([FeeCalculatorLayout], 'feeCalculator'),
2020-01-02 17:54:43 -08:00
]);
export const NONCE_ACCOUNT_LENGTH = NonceAccountLayout.span;
2020-01-02 17:54:43 -08:00
/**
* NonceAccount class
*/
export class NonceAccount {
authorizedPubkey: PublicKey;
nonce: Blockhash;
feeCalculator: FeeCalculator;
2020-01-02 17:54:43 -08:00
/**
* 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;
}
}