mirror of https://github.com/certusone/oyster.git
feat: borsh
This commit is contained in:
parent
cc1e58e4a1
commit
7b4a17006f
|
@ -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']],
|
||||||
|
},
|
||||||
|
],
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -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 ---
|
||||||
|
|
|
@ -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>></span></Button>
|
<Button className="congrats-button"><span>Share it on Twitter</span><span>></span></Button>
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -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()}`)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue