feat: borsh

This commit is contained in:
bartosz-lipinski 2021-04-22 19:53:50 -05:00
parent cc1e58e4a1
commit 7b4a17006f
4 changed files with 129 additions and 21 deletions

View File

@ -1,4 +1,6 @@
import { deserializeBorsh } from '@oyster/common';
import { PublicKey } from '@solana/web3.js'; import { PublicKey } from '@solana/web3.js';
import { serialize, BinaryReader, BinaryWriter } from 'borsh';
export * from './initAuctionManager'; export * from './initAuctionManager';
export * from './redeemBid'; export * from './redeemBid';
@ -8,6 +10,19 @@ export * from './redeemOpenEditionBid';
export * from './startAuction'; export * from './startAuction';
export * from './validateSafetyDepositBox'; export * from './validateSafetyDepositBox';
(BinaryReader.prototype as any).readPubkey = function () {
debugger;
const reader = (this as unknown) as BinaryReader;
const array = reader.readFixedArray(32);
return new PublicKey(array);
};
(BinaryWriter.prototype as any).writePubkey = function (value: PublicKey) {
debugger;
const writer = (this as unknown) as BinaryWriter;
writer.writeFixedArray(value.toBuffer());
};
export class AuctionManager { export class AuctionManager {
key?: number; key?: number;
authority?: PublicKey; authority?: PublicKey;
@ -21,6 +36,34 @@ export class AuctionManager {
settings?: AuctionManagerSettings; settings?: AuctionManagerSettings;
} }
export class InitAuctionManagerArgs {
instruction = 0;
}
export class ValidateSafetyDepositBoxArgs {
instruction = 1;
}
export class RedeemBidArgs {
instruction = 2;
}
export class RedeemMasterEditionBidArgs {
instruction = 3;
}
export class RedeemLimitedEditionBidArgs {
instruction = 4;
}
export class RedeemOpenEditionBidArgs {
instruction = 5;
}
export class StartAuctionArgs {
instruction = 6;
}
export class AuctionManagerSettings { export class AuctionManagerSettings {
openEditionWinnerConstraint?: WinningConstraint; openEditionWinnerConstraint?: WinningConstraint;
openEditionNonWinningConstraint?: NonWinningConstraint; openEditionNonWinningConstraint?: NonWinningConstraint;
@ -99,13 +142,13 @@ export const SCHEMA = new Map<any, any>([
kind: 'struct', kind: 'struct',
fields: [ fields: [
['key', 'u8'], ['key', 'u8'],
['authority', 'u32'], ['authority', 'pubkey'],
['auction', 'u32'], ['auction', 'pubkey'],
['vault', 'u32'], ['vault', 'pubkey'],
['auctionProgram', 'u32'], ['auctionProgram', 'pubkey'],
['tokenVaultProgram', 'u32'], ['tokenVaultProgram', 'pubkey'],
['tokenMetadataProgram', 'u32'], ['tokenMetadataProgram', 'pubkey'],
['tokenProgram', 'u32'], ['tokenProgram', 'pubkey'],
['state', AuctionManagerState], ['state', AuctionManagerState],
['settings', AuctionManagerSettings], ['settings', AuctionManagerSettings],
], ],
@ -116,8 +159,11 @@ export const SCHEMA = new Map<any, any>([
{ {
kind: 'struct', kind: 'struct',
fields: [ fields: [
['openEditionWinnerConstraint', { kind: 'enum' }], // TODO: ['openEditionWinnerConstraint', { kind: 'enum', values: [0, 1, 2] }], // TODO:
['openEditionNonWinningConstraint', { kind: 'enum' }], // TODO: [
'openEditionNonWinningConstraint',
{ kind: 'enum', values: [0, 1, 2] },
], // TODO:
['winningConfigs', [WinningConfig]], // TODO: check ['winningConfigs', [WinningConfig]], // TODO: check
['openEditionConfig', { kind: 'option', type: 'u8' }], ['openEditionConfig', { kind: 'option', type: 'u8' }],
['openEditionFixedPrice', { kind: 'option', type: 'u8' }], ['openEditionFixedPrice', { kind: 'option', type: 'u8' }],
@ -132,7 +178,7 @@ export const SCHEMA = new Map<any, any>([
['safetyDepositBoxIndex', 'u8'], ['safetyDepositBoxIndex', 'u8'],
['amount', 'u8'], ['amount', 'u8'],
['hasAuthority', 'u8'], // bool ['hasAuthority', 'u8'], // bool
['editionType', { kind: 'enum' }], // TODO: ['editionType', { kind: 'enum', values: [0, 1, 2] }], // TODO:
], ],
}, },
], ],
@ -153,7 +199,7 @@ export const SCHEMA = new Map<any, any>([
kind: 'struct', kind: 'struct',
fields: [ fields: [
// TODO: fix enum // TODO: fix enum
['status', { kind: 'enum' }], ['status', { kind: 'enum', values: [0, 1, 2] }],
['winningConfigsValidated', 'u8'], ['winningConfigsValidated', 'u8'],
['masterEditionsWithAuthoritiesRemainingToReturn', 'u8'], ['masterEditionsWithAuthoritiesRemainingToReturn', 'u8'],
['winningConfigStates', [WinningConfigState]], ['winningConfigStates', [WinningConfigState]],
@ -170,4 +216,53 @@ export const SCHEMA = new Map<any, any>([
], ],
}, },
], ],
[
InitAuctionManagerArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
[
ValidateSafetyDepositBoxArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
[
RedeemBidArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
[
RedeemMasterEditionBidArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
[
RedeemLimitedEditionBidArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
[
RedeemOpenEditionBidArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
[
StartAuctionArgs,
{
kind: 'struct',
fields: [['instruction', 'u8']],
},
],
]); ]);

View File

@ -1,15 +1,15 @@
import { PublicKey } from '@solana/web3.js'; import { PublicKey } from '@solana/web3.js';
export const AUCTION_PROGRAM_ID = new PublicKey( export const AUCTION_PROGRAM_ID = new PublicKey(
'aucPpK6yb5MpEHDwyp3Kg79McUoKVqTMeum7iJ9syeH', 'C9nHkL6BfGx9M9MyYrJqAD5hPsGJd1fHpp1uAJA6vTCn',
); );
export const VAULT_PROGRAM_ID = new PublicKey( export const VAULT_PROGRAM_ID = new PublicKey(
'vauLTA73sFPqA8whreUbBsbn3SLJH2vhrW9fP5dmfdC', '94wRaYAQdC2gYF76AUTYSugNJ3rAC4EimjAMPwM7uYry',
); );
export const METAPLEX_PROGRAM_ID = new PublicKey( export const METAPLEX_PROGRAM_ID = new PublicKey(
'HvwC9QSAzvGXhhVrgPmauVwFWcYZhne3hVot9EbHuFTm', 'EPtpKdKW8qciGVd1UFyGjgbBHTbSAyvbY61h9uQGVgeu',
); );
// TODO: generate key --- // TODO: generate key ---

View File

@ -734,7 +734,7 @@ const Congrats = () => {
return <> return <>
<div style={{ marginTop: 70 }}> <div style={{ marginTop: 70 }}>
<div className="waiting-title"> <div className="waiting-title">
Congratulations! Your creation is now live. Congratulations, you created an NFT!
</div> </div>
<div className="congrats-button-container"> <div className="congrats-button-container">
<Button className="congrats-button"><span>Share it on Twitter</span><span>&gt;</span></Button> <Button className="congrats-button"><span>Share it on Twitter</span><span>&gt;</span></Button>

View File

@ -31,14 +31,17 @@ import {
useConnectionConfig, useConnectionConfig,
Metadata, Metadata,
ParsedAccount, ParsedAccount,
deserializeBorsh,
} from '@oyster/common'; } from '@oyster/common';
import { getAssetCostToStore, LAMPORT_MULTIPLIER } from '../../utils/assets'; import { getAssetCostToStore, LAMPORT_MULTIPLIER } from '../../utils/assets';
import { Connection, ParsedAccountData, PublicKey } from '@solana/web3.js'; import { Connection, ParsedAccountData, PublicKey } from '@solana/web3.js';
import { MintLayout } from '@solana/spl-token'; import { MintLayout, TOKEN_PROGRAM_ID } from '@solana/spl-token';
import { useHistory, useParams } from 'react-router-dom'; import { useHistory, useParams } from 'react-router-dom';
import { useUserArts } from '../../hooks'; import { useUserArts } from '../../hooks';
import Masonry from 'react-masonry-css'; import Masonry from 'react-masonry-css';
import { capitalize } from 'lodash'; import { capitalize } from 'lodash';
import { AuctionManager, SCHEMA } from '../../models/metaplex';
import { serialize } from 'borsh';
const { Step } = Steps; const { Step } = Steps;
const { Option } = Select; const { Option } = Select;
@ -67,23 +70,23 @@ export interface AuctionState {
// suggested date time when auction should end UTC+0 // suggested date time when auction should end UTC+0
endDate?: Date; endDate?: Date;
// Jose's attributes // Jose's attributes
category: AuctionCategory; category: AuctionCategory;
saleType?: "auction" | "sale"; saleType?: "auction" | "sale";
price?: number; price?: number;
priceFloor?: number; priceFloor?: number;
priceTick?: number; priceTick?: number;
startSaleTS?: number; // Why do I prefer to work with unix ts? startSaleTS?: number; // Why do I prefer to work with unix ts?
startListTS?: number; startListTS?: number;
endTS?: number; endTS?: number;
auctionDuration?: number; auctionDuration?: number;
gapTime?: number; gapTime?: number;
tickSizeEndingPhase?: number; tickSizeEndingPhase?: number;
} }
export const AuctionCreateView = () => { export const AuctionCreateView = () => {
@ -109,6 +112,16 @@ export const AuctionCreateView = () => {
}, [step_param]) }, [step_param])
const gotoNextStep = (_step?: number) => { const gotoNextStep = (_step?: number) => {
debugger;
const test = new AuctionManager();
test.auction = TOKEN_PROGRAM_ID;
const buffer = serialize(SCHEMA, test);
const test2 = deserializeBorsh(SCHEMA, AuctionManager, Buffer.from(buffer));
debugger;
const nextStep = _step === undefined ? (step + 1) : _step; const nextStep = _step === undefined ? (step + 1) : _step;
history.push(`/auction/create/${nextStep.toString()}`) history.push(`/auction/create/${nextStep.toString()}`)
} }