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 { 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<any, any>([
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<any, any>([
{
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<any, any>([
['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<any, any>([
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<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';
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 ---

View File

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

View File

@ -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()}`)
}