mirror of https://github.com/certusone/oyster.git
Selling master editions work
This commit is contained in:
parent
09885f6a2f
commit
c5d2a98404
|
@ -35,15 +35,24 @@ export class Bid {
|
|||
|
||||
export class BidState {
|
||||
type: BidStateType;
|
||||
bids?: Bid[];
|
||||
max?: BN;
|
||||
bids: Bid[];
|
||||
max: BN;
|
||||
|
||||
public getWinnerIndex(bidder: PublicKey): number | null {
|
||||
if (!this.bids) return null;
|
||||
return this.bids.findIndex(b => b.key.toBase58() == bidder.toBase58());
|
||||
console.log(
|
||||
'bids',
|
||||
this.bids.map(b => b.key.toBase58()),
|
||||
bidder.toBase58(),
|
||||
);
|
||||
const index = this.bids.findIndex(
|
||||
b => b.key.toBase58() == bidder.toBase58(),
|
||||
);
|
||||
if (index != -1) return index;
|
||||
else return null;
|
||||
}
|
||||
|
||||
constructor(args: { type: BidStateType; bids?: Bid[]; max?: BN }) {
|
||||
constructor(args: { type: BidStateType; bids: Bid[]; max: BN }) {
|
||||
this.type = args.type;
|
||||
this.bids = args.bids;
|
||||
this.max = args.max;
|
||||
|
@ -297,8 +306,8 @@ export const AUCTION_SCHEMA = new Map<any, any>([
|
|||
kind: 'struct',
|
||||
fields: [
|
||||
['type', 'u8'],
|
||||
['bids', { kind: 'option', type: [Bid] }],
|
||||
['max', { kind: 'option', type: 'u64' }],
|
||||
['bids', [Bid]],
|
||||
['max', 'u64'],
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
@ -170,14 +170,12 @@ export async function createAuctionManager(
|
|||
wallet,
|
||||
vault,
|
||||
// No need to validate open edition, it's already been during init
|
||||
safetyDeposits.filter(
|
||||
(_, i) =>
|
||||
settings.openEditionConfig != null && i != settings.openEditionConfig,
|
||||
),
|
||||
safetyDeposits.filter((_, i) => i != settings.openEditionConfig),
|
||||
stores,
|
||||
),
|
||||
};
|
||||
|
||||
console.log('Lookup', lookup.validateBoxes);
|
||||
let signers: Account[][] = [
|
||||
lookup.externalPriceAccount.signers,
|
||||
lookup.createVault.signers,
|
||||
|
|
|
@ -53,10 +53,11 @@ export async function sendRedeemBid(
|
|||
);
|
||||
|
||||
let winnerIndex = null;
|
||||
if (auctionView.myBidderMetadata?.info.bidderPubkey)
|
||||
if (auctionView.myBidderPot?.pubkey)
|
||||
winnerIndex = auctionView.auction.info.bidState.getWinnerIndex(
|
||||
auctionView.myBidderMetadata?.info.bidderPubkey,
|
||||
auctionView.myBidderPot?.pubkey,
|
||||
);
|
||||
console.log('Winner index', winnerIndex);
|
||||
|
||||
if (winnerIndex != null) {
|
||||
const winningConfig =
|
||||
|
@ -65,6 +66,7 @@ export async function sendRedeemBid(
|
|||
const safetyDeposit = item.safetyDeposit;
|
||||
switch (winningConfig.editionType) {
|
||||
case EditionType.LimitedEdition:
|
||||
console.log('Redeeming limited');
|
||||
await setupRedeemLimitedInstructions(
|
||||
connection,
|
||||
auctionView,
|
||||
|
@ -79,6 +81,7 @@ export async function sendRedeemBid(
|
|||
);
|
||||
break;
|
||||
case EditionType.MasterEdition:
|
||||
console.log('Redeeming master');
|
||||
await setupRedeemMasterInstructions(
|
||||
auctionView,
|
||||
accountsByMint,
|
||||
|
@ -91,6 +94,7 @@ export async function sendRedeemBid(
|
|||
);
|
||||
break;
|
||||
case EditionType.NA:
|
||||
console.log('Redeeming normal');
|
||||
await setupRedeemInstructions(
|
||||
auctionView,
|
||||
accountsByMint,
|
||||
|
@ -461,10 +465,6 @@ async function setupRedeemOpenInstructions(
|
|||
|
||||
cashInOpenPrizeAuthorizationTokenSigner.push(burnAuthority);
|
||||
|
||||
console.log(
|
||||
'My master edition key',
|
||||
item.masterEdition.pubkey.toBase58(),
|
||||
);
|
||||
await mintNewEditionFromMasterEditionViaToken(
|
||||
newOpenEditionMint,
|
||||
item.metadata.info.mint,
|
||||
|
|
|
@ -153,7 +153,13 @@ export function MetaProvider({ children = null as any }) {
|
|||
...e,
|
||||
[a.pubkey.toBase58()]: account,
|
||||
}));
|
||||
} catch {
|
||||
} catch (e) {
|
||||
if (
|
||||
a.pubkey.toBase58() ===
|
||||
'yNPR97243ke5cV3QGW9ZhSxfVP1K2YVQxzkjikCVbee'
|
||||
) {
|
||||
console.error(e);
|
||||
}
|
||||
// ignore errors
|
||||
// add type as first byte for easier deserialization
|
||||
}
|
||||
|
|
|
@ -134,7 +134,6 @@ export enum EditionType {
|
|||
export class WinningConfig {
|
||||
safetyDepositBoxIndex: number = 0;
|
||||
amount: number = 0;
|
||||
hasAuthority: boolean = false;
|
||||
editionType: EditionType = EditionType.NA;
|
||||
|
||||
constructor(args?: WinningConfig) {
|
||||
|
@ -233,7 +232,6 @@ export const SCHEMA = new Map<any, any>([
|
|||
fields: [
|
||||
['safetyDepositBoxIndex', 'u8'],
|
||||
['amount', 'u8'],
|
||||
['hasAuthority', 'u8'], // bool
|
||||
['editionType', 'u8'],
|
||||
],
|
||||
},
|
||||
|
|
|
@ -37,15 +37,7 @@ export async function initAuctionManager(
|
|||
});
|
||||
|
||||
const data = Buffer.from(serialize(SCHEMA, value));
|
||||
console.log(
|
||||
'Auction',
|
||||
auctionManagerKey,
|
||||
vault,
|
||||
auctionKey,
|
||||
auctionManagerAuthority,
|
||||
payer,
|
||||
acceptPaymentAccount,
|
||||
);
|
||||
console.log('mData', data, settings);
|
||||
const keys = [
|
||||
{
|
||||
pubkey: auctionManagerKey,
|
||||
|
|
|
@ -166,15 +166,17 @@ export const AuctionCreateView = () => {
|
|||
settings = new AuctionManagerSettings({
|
||||
openEditionWinnerConstraint: WinningConstraint.NoOpenEdition,
|
||||
openEditionNonWinningConstraint: NonWinningConstraint.NoOpenEdition,
|
||||
winningConfigs: attributes.items.map((item, index) => (new WinningConfig({
|
||||
// TODO: check index
|
||||
safetyDepositBoxIndex: index,
|
||||
amount: 1,
|
||||
hasAuthority: false,
|
||||
editionType: item.masterEdition
|
||||
? EditionType.MasterEdition
|
||||
: EditionType.NA,
|
||||
}))),
|
||||
winningConfigs: attributes.items.map(
|
||||
(item, index) =>
|
||||
new WinningConfig({
|
||||
// TODO: check index
|
||||
safetyDepositBoxIndex: index,
|
||||
amount: 1,
|
||||
editionType: item.masterEdition
|
||||
? EditionType.MasterEdition
|
||||
: EditionType.NA,
|
||||
}),
|
||||
),
|
||||
openEditionConfig: null,
|
||||
openEditionFixedPrice: null,
|
||||
});
|
||||
|
@ -191,7 +193,7 @@ export const AuctionCreateView = () => {
|
|||
wallet,
|
||||
settings,
|
||||
winnerLimit,
|
||||
new BN((attributes.auctionDuration || 1) * 60 * 60 * 24),
|
||||
new BN((attributes.auctionDuration || 1) * 60),
|
||||
new BN((attributes.gapTime || 1) * 60),
|
||||
attributes.items,
|
||||
// TODO: move to config
|
||||
|
@ -362,7 +364,7 @@ export const AuctionCreateView = () => {
|
|||
)}
|
||||
<Col {...(saving ? { xl: 24 } : { xl: 16, md: 17 })}>
|
||||
{stepsByCategory[attributes.category][step][1]}
|
||||
{0 < step && step < (stepsByCategory[attributes.category].length -1) && (
|
||||
{0 < step && step < stepsByCategory[attributes.category].length - 1 && (
|
||||
<Button
|
||||
style={{ width: '100%' }}
|
||||
onClick={() => gotoNextStep(step - 1)}
|
||||
|
@ -495,25 +497,27 @@ const CopiesStep = (props: {
|
|||
>
|
||||
Select NFT
|
||||
</ArtSelector>
|
||||
{props.attributes.category !== AuctionCategory.Open && <label className="action-field">
|
||||
<span className="field-title">
|
||||
How many copies do you want to create?
|
||||
</span>
|
||||
<span className="field-info">
|
||||
Each copy will be given unique edition number e.g. 1 of 30
|
||||
</span>
|
||||
<Input
|
||||
autoFocus
|
||||
className="input"
|
||||
placeholder="Enter number of copies sold"
|
||||
allowClear
|
||||
onChange={info =>
|
||||
props.setAttributes({
|
||||
...props.attributes,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</label>}
|
||||
{props.attributes.category !== AuctionCategory.Open && (
|
||||
<label className="action-field">
|
||||
<span className="field-title">
|
||||
How many copies do you want to create?
|
||||
</span>
|
||||
<span className="field-info">
|
||||
Each copy will be given unique edition number e.g. 1 of 30
|
||||
</span>
|
||||
<Input
|
||||
autoFocus
|
||||
className="input"
|
||||
placeholder="Enter number of copies sold"
|
||||
allowClear
|
||||
onChange={info =>
|
||||
props.setAttributes({
|
||||
...props.attributes,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</label>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
|
|
Loading…
Reference in New Issue