diff --git a/packages/metavinci/src/actions/auction.tsx b/packages/metavinci/src/actions/auction.tsx new file mode 100644 index 0000000..f65d7ef --- /dev/null +++ b/packages/metavinci/src/actions/auction.tsx @@ -0,0 +1,3 @@ +export const createAuction = () => { + // TODO: +}; diff --git a/packages/metavinci/src/actions/index.ts b/packages/metavinci/src/actions/index.ts index 41dba20..21033bc 100644 --- a/packages/metavinci/src/actions/index.ts +++ b/packages/metavinci/src/actions/index.ts @@ -1 +1,3 @@ -export const nop = () => {}; +export * from './nft'; +export * from './vault'; +export * from './auction'; diff --git a/packages/metavinci/src/models/nft.tsx b/packages/metavinci/src/actions/nft.tsx similarity index 100% rename from packages/metavinci/src/models/nft.tsx rename to packages/metavinci/src/actions/nft.tsx diff --git a/packages/metavinci/src/actions/vault.tsx b/packages/metavinci/src/actions/vault.tsx new file mode 100644 index 0000000..a5c8ba7 --- /dev/null +++ b/packages/metavinci/src/actions/vault.tsx @@ -0,0 +1,3 @@ +export const createVault = () => { + // TODO: +}; diff --git a/packages/metavinci/src/models/index.ts b/packages/metavinci/src/models/index.ts index e71e38e..ef81038 100644 --- a/packages/metavinci/src/models/index.ts +++ b/packages/metavinci/src/models/index.ts @@ -1,2 +1 @@ export * from './dex'; -export * from './nft'; diff --git a/packages/metavinci/src/models/metaplex/index.ts b/packages/metavinci/src/models/metaplex/index.ts new file mode 100644 index 0000000..0abf6ce --- /dev/null +++ b/packages/metavinci/src/models/metaplex/index.ts @@ -0,0 +1,173 @@ +import { PublicKey } from '@solana/web3.js'; + +export * from './initAuctionManager'; +export * from './redeemBid'; +export * from './redeemLimitedEditionBid'; +export * from './redeemMasterEditionBid'; +export * from './redeemOpenEditionBid'; +export * from './startAuction'; +export * from './validateSafetyDepositBox'; + +export class AuctionManager { + key: number; + authority: PublicKey; + auction: PublicKey; + vault: PublicKey; + auctionProgram: PublicKey; + tokenVaultProgram: PublicKey; + tokenMetadataProgram: PublicKey; + tokenProgram: PublicKey; + state: AuctionManagerState; + settings: AuctionManagerSettings; +} + +export class AuctionManagerSettings { + openEditionWinnerConstraint: WinningConstraint; + openEditionNonWinningConstraint: NonWinningConstraint; + winningConfigs: WinningConfig[]; + openEditionConfig?: number; + openEditionFixedPrice?: number; +} + +export enum WinningConstraint { + NoOpenEdition, + OpenEditionGiven, +} + +export enum NonWinningConstraint { + NoOpenEdition, + GivenForFixedPrice, + GivenForBidPrice, +} + +export enum EditionType { + // Not an edition + NA, + /// Means you are auctioning off the master edition record + MasterEdition, + /// Means you are using the master edition to print off new editions during the auction (limited or open edition) + LimitedEdition, +} + +export class WinningConfig { + safetyDepositBoxIndex: number; + amount: number; + hasAuthority: boolean; + editionType: EditionType; +} + +export class WinningConfigState { + /// Used for cases of minting Limited Editions and keeping track of how many have been made so far. + amountMinted: number; + /// Each safety deposit box needs to be validated via endpoint before auction manager will agree to let auction begin. + validated: boolean; + /// Ticked to true when a prize is claimed + claimed: boolean; +} + +export class AuctionManagerState { + status: AuctionManagerStatus; + /// When all configs are validated the auction is started and auction manager moves to Running + winningConfigsValidated: number; + + /// Each master edition used as a template has to grant it's authority to the auction manager. + /// This counter is incremented by one each time this is done. At the end of the auction; this is decremented + /// each time authority is delegated back to the owner or the new owner and when it hits 0 another condition + /// is met for going to Finished state. + masterEditionsWithAuthoritiesRemainingToReturn: number; + + winningConfigStates: WinningConfigState[]; +} + +export enum AuctionManagerStatus { + Initialized, + Validated, + Running, + Disbursing, + Finished, +} + +export class BidRedemptionTicket { + openEditionRedeemed: boolean; + bidRedeemed: boolean; +} + +export const SCHEMA = new Map([ + [ + AuctionManager, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['authority', 'u32'], + ['auction', 'u32'], + ['vault', 'u32'], + ['auctionProgram', 'u32'], + ['tokenVaultProgram', 'u32'], + ['tokenMetadataProgram', 'u32'], + ['tokenProgram', 'u32'], + ['state', AuctionManagerState], + ['settings', AuctionManagerSettings], + ], + }, + ], + [ + AuctionManagerSettings, + { + kind: 'struct', + fields: [ + ['openEditionWinnerConstraint', { kind: 'enum' }], // TODO: + ['openEditionNonWinningConstraint', { kind: 'enum' }], // TODO: + ['winningConfigs', [WinningConfig]], // TODO: check + ['openEditionConfig', { kind: 'option', type: 'u8' }], + ['openEditionFixedPrice', { kind: 'option', type: 'u8' }], + ], + }, + ], + [ + WinningConfig, + { + kind: 'struct', + fields: [ + ['safetyDepositBoxIndex', 'u8'], + ['amount', 'u8'], + ['hasAuthority', 'u8'], // bool + ['editionType', { kind: 'enum' }], // TODO: + ], + }, + ], + [ + WinningConfigState, + { + kind: 'struct', + fields: [ + ['amountMinted', 'u8'], + ['validated', 'u8'], // bool + ['claimed', 'u8'], // bool + ], + }, + ], + [ + AuctionManagerState, + { + kind: 'struct', + fields: [ + // TODO: fix enum + ['status', { kind: 'enum' }], + ['winningConfigsValidated', 'u8'], + ['masterEditionsWithAuthoritiesRemainingToReturn', 'u8'], + ['winningConfigStates', [WinningConfigState]], + ], + }, + ], + [ + BidRedemptionTicket, + { + kind: 'struct', + fields: [ + ['openEditionRedeemed', 'u8'], // bool + ['bidRedeemed', 'u8'], // bool + ], + }, + ], +]); diff --git a/packages/metavinci/src/models/metaplex/initAuctionManager.ts b/packages/metavinci/src/models/metaplex/initAuctionManager.ts new file mode 100644 index 0000000..8526400 --- /dev/null +++ b/packages/metavinci/src/models/metaplex/initAuctionManager.ts @@ -0,0 +1 @@ +export const initAuctionManager = () => {}; diff --git a/packages/metavinci/src/models/metaplex/redeemBid.ts b/packages/metavinci/src/models/metaplex/redeemBid.ts new file mode 100644 index 0000000..3d5bcfc --- /dev/null +++ b/packages/metavinci/src/models/metaplex/redeemBid.ts @@ -0,0 +1 @@ +export const redeemBid = () => {}; diff --git a/packages/metavinci/src/models/metaplex/redeemLimitedEditionBid.ts b/packages/metavinci/src/models/metaplex/redeemLimitedEditionBid.ts new file mode 100644 index 0000000..86d5cee --- /dev/null +++ b/packages/metavinci/src/models/metaplex/redeemLimitedEditionBid.ts @@ -0,0 +1 @@ +export const redeemLimitedEditionBid = () => {}; diff --git a/packages/metavinci/src/models/metaplex/redeemMasterEditionBid.ts b/packages/metavinci/src/models/metaplex/redeemMasterEditionBid.ts new file mode 100644 index 0000000..839b792 --- /dev/null +++ b/packages/metavinci/src/models/metaplex/redeemMasterEditionBid.ts @@ -0,0 +1 @@ +export const redeemMasterEditionBid = () => {}; diff --git a/packages/metavinci/src/models/metaplex/redeemOpenEditionBid.ts b/packages/metavinci/src/models/metaplex/redeemOpenEditionBid.ts new file mode 100644 index 0000000..c19c9a2 --- /dev/null +++ b/packages/metavinci/src/models/metaplex/redeemOpenEditionBid.ts @@ -0,0 +1 @@ +export const redeemOpenEditionBid = () => {}; diff --git a/packages/metavinci/src/models/metaplex/startAuction.ts b/packages/metavinci/src/models/metaplex/startAuction.ts new file mode 100644 index 0000000..fa27332 --- /dev/null +++ b/packages/metavinci/src/models/metaplex/startAuction.ts @@ -0,0 +1 @@ +export const startAuction = () => {}; diff --git a/packages/metavinci/src/models/metaplex/validateSafetyDepositBox.ts b/packages/metavinci/src/models/metaplex/validateSafetyDepositBox.ts new file mode 100644 index 0000000..85d02ff --- /dev/null +++ b/packages/metavinci/src/models/metaplex/validateSafetyDepositBox.ts @@ -0,0 +1 @@ +export const validateSafetyDepositBox = () => {}; diff --git a/packages/metavinci/src/utils/ids.ts b/packages/metavinci/src/utils/ids.ts index 0af8d86..c5d9317 100644 --- a/packages/metavinci/src/utils/ids.ts +++ b/packages/metavinci/src/utils/ids.ts @@ -1,9 +1,18 @@ import { PublicKey } from '@solana/web3.js'; -export const WORMHOLE_PROGRAM_ID = new PublicKey( - 'WormT3McKhFJ2RkiGpdw9GKvNCrB2aB54gb2uV9MfQC', +export const AUCTION_PROGRAM_ID = new PublicKey( + 'aucPpK6yb5MpEHDwyp3Kg79McUoKVqTMeum7iJ9syeH', ); +export const VAULT_PROGRAM_ID = new PublicKey( + 'vauLTA73sFPqA8whreUbBsbn3SLJH2vhrW9fP5dmfdC', +); + +export const METAPLEX_PROGRAM_ID = new PublicKey( + 'HvwC9QSAzvGXhhVrgPmauVwFWcYZhne3hVot9EbHuFTm', +); + +// TODO: generate key --- export const AR_SOL_HOLDER_ID = new PublicKey( 'HvwC9QSAzvGXhhVrgPmauVwFWcYZhne3hVot9EbHuFTm', ); diff --git a/packages/metavinci/src/views/artCreate/index.tsx b/packages/metavinci/src/views/artCreate/index.tsx index a83591f..6f07e67 100644 --- a/packages/metavinci/src/views/artCreate/index.tsx +++ b/packages/metavinci/src/views/artCreate/index.tsx @@ -17,7 +17,7 @@ import { ArtCard } from './../../components/ArtCard'; import { UserSearch, UserValue } from './../../components/UserSearch'; import { Confetti } from './../../components/Confetti'; import './../styles.less'; -import { mintNFT } from '../../models'; +import { mintNFT } from '../../actions'; import { MAX_METADATA_LEN, MAX_OWNER_LEN, diff --git a/packages/metavinci/src/views/auctionCreate/index.tsx b/packages/metavinci/src/views/auctionCreate/index.tsx index c15fe74..8706623 100644 --- a/packages/metavinci/src/views/auctionCreate/index.tsx +++ b/packages/metavinci/src/views/auctionCreate/index.tsx @@ -321,6 +321,8 @@ const TermsStep = (props: { }) => { const [creators, setCreators] = useState>([]); + + return ( <> @@ -331,6 +333,22 @@ const TermsStep = (props: { + +