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