From 7b4a17006fabb08c03d3ce0e22228726650888d0 Mon Sep 17 00:00:00 2001 From: bartosz-lipinski <264380+bartosz-lipinski@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:53:50 -0500 Subject: [PATCH] feat: borsh --- .../metavinci/src/models/metaplex/index.ts | 117 ++++++++++++++++-- packages/metavinci/src/utils/ids.ts | 6 +- .../metavinci/src/views/artCreate/index.tsx | 2 +- .../src/views/auctionCreate/index.tsx | 25 +++- 4 files changed, 129 insertions(+), 21 deletions(-) diff --git a/packages/metavinci/src/models/metaplex/index.ts b/packages/metavinci/src/models/metaplex/index.ts index 95d5c6c..890b1b4 100644 --- a/packages/metavinci/src/models/metaplex/index.ts +++ b/packages/metavinci/src/models/metaplex/index.ts @@ -1,4 +1,6 @@ +import { deserializeBorsh } from '@oyster/common'; import { PublicKey } from '@solana/web3.js'; +import { serialize, BinaryReader, BinaryWriter } from 'borsh'; export * from './initAuctionManager'; export * from './redeemBid'; @@ -8,6 +10,19 @@ export * from './redeemOpenEditionBid'; export * from './startAuction'; 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 { key?: number; authority?: PublicKey; @@ -21,6 +36,34 @@ export class AuctionManager { 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 { openEditionWinnerConstraint?: WinningConstraint; openEditionNonWinningConstraint?: NonWinningConstraint; @@ -99,13 +142,13 @@ export const SCHEMA = new Map([ kind: 'struct', fields: [ ['key', 'u8'], - ['authority', 'u32'], - ['auction', 'u32'], - ['vault', 'u32'], - ['auctionProgram', 'u32'], - ['tokenVaultProgram', 'u32'], - ['tokenMetadataProgram', 'u32'], - ['tokenProgram', 'u32'], + ['authority', 'pubkey'], + ['auction', 'pubkey'], + ['vault', 'pubkey'], + ['auctionProgram', 'pubkey'], + ['tokenVaultProgram', 'pubkey'], + ['tokenMetadataProgram', 'pubkey'], + ['tokenProgram', 'pubkey'], ['state', AuctionManagerState], ['settings', AuctionManagerSettings], ], @@ -116,8 +159,11 @@ export const SCHEMA = new Map([ { kind: 'struct', fields: [ - ['openEditionWinnerConstraint', { kind: 'enum' }], // TODO: - ['openEditionNonWinningConstraint', { kind: 'enum' }], // TODO: + ['openEditionWinnerConstraint', { kind: 'enum', values: [0, 1, 2] }], // TODO: + [ + 'openEditionNonWinningConstraint', + { kind: 'enum', values: [0, 1, 2] }, + ], // TODO: ['winningConfigs', [WinningConfig]], // TODO: check ['openEditionConfig', { kind: 'option', type: 'u8' }], ['openEditionFixedPrice', { kind: 'option', type: 'u8' }], @@ -132,7 +178,7 @@ export const SCHEMA = new Map([ ['safetyDepositBoxIndex', 'u8'], ['amount', 'u8'], ['hasAuthority', 'u8'], // bool - ['editionType', { kind: 'enum' }], // TODO: + ['editionType', { kind: 'enum', values: [0, 1, 2] }], // TODO: ], }, ], @@ -153,7 +199,7 @@ export const SCHEMA = new Map([ kind: 'struct', fields: [ // TODO: fix enum - ['status', { kind: 'enum' }], + ['status', { kind: 'enum', values: [0, 1, 2] }], ['winningConfigsValidated', 'u8'], ['masterEditionsWithAuthoritiesRemainingToReturn', 'u8'], ['winningConfigStates', [WinningConfigState]], @@ -170,4 +216,53 @@ export const SCHEMA = new Map([ ], }, ], + [ + 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']], + }, + ], ]); diff --git a/packages/metavinci/src/utils/ids.ts b/packages/metavinci/src/utils/ids.ts index c5d9317..2b2e9b7 100644 --- a/packages/metavinci/src/utils/ids.ts +++ b/packages/metavinci/src/utils/ids.ts @@ -1,15 +1,15 @@ import { PublicKey } from '@solana/web3.js'; export const AUCTION_PROGRAM_ID = new PublicKey( - 'aucPpK6yb5MpEHDwyp3Kg79McUoKVqTMeum7iJ9syeH', + 'C9nHkL6BfGx9M9MyYrJqAD5hPsGJd1fHpp1uAJA6vTCn', ); export const VAULT_PROGRAM_ID = new PublicKey( - 'vauLTA73sFPqA8whreUbBsbn3SLJH2vhrW9fP5dmfdC', + '94wRaYAQdC2gYF76AUTYSugNJ3rAC4EimjAMPwM7uYry', ); export const METAPLEX_PROGRAM_ID = new PublicKey( - 'HvwC9QSAzvGXhhVrgPmauVwFWcYZhne3hVot9EbHuFTm', + 'EPtpKdKW8qciGVd1UFyGjgbBHTbSAyvbY61h9uQGVgeu', ); // TODO: generate key --- diff --git a/packages/metavinci/src/views/artCreate/index.tsx b/packages/metavinci/src/views/artCreate/index.tsx index 6f07e67..a8e5367 100644 --- a/packages/metavinci/src/views/artCreate/index.tsx +++ b/packages/metavinci/src/views/artCreate/index.tsx @@ -734,7 +734,7 @@ const Congrats = () => { return <>
- Congratulations! Your creation is now live. + Congratulations, you created an NFT!
diff --git a/packages/metavinci/src/views/auctionCreate/index.tsx b/packages/metavinci/src/views/auctionCreate/index.tsx index 45908c5..756e3f8 100644 --- a/packages/metavinci/src/views/auctionCreate/index.tsx +++ b/packages/metavinci/src/views/auctionCreate/index.tsx @@ -31,14 +31,17 @@ import { useConnectionConfig, Metadata, ParsedAccount, + deserializeBorsh, } from '@oyster/common'; import { getAssetCostToStore, LAMPORT_MULTIPLIER } from '../../utils/assets'; 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 { useUserArts } from '../../hooks'; import Masonry from 'react-masonry-css'; import { capitalize } from 'lodash'; +import { AuctionManager, SCHEMA } from '../../models/metaplex'; +import { serialize } from 'borsh'; const { Step } = Steps; const { Option } = Select; @@ -67,23 +70,23 @@ export interface AuctionState { // suggested date time when auction should end UTC+0 endDate?: Date; - + // Jose's attributes category: AuctionCategory; saleType?: "auction" | "sale"; - + price?: number; priceFloor?: number; priceTick?: number; - + startSaleTS?: number; // Why do I prefer to work with unix ts? startListTS?: number; endTS?: number; - + auctionDuration?: number; gapTime?: number; tickSizeEndingPhase?: number; - + } export const AuctionCreateView = () => { @@ -109,6 +112,16 @@ export const AuctionCreateView = () => { }, [step_param]) 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; history.push(`/auction/create/${nextStep.toString()}`) }