Merge remote-tracking branch 'origin/feature/m-jordan' into feature/m

This commit is contained in:
bartosz-lipinski 2021-04-27 22:22:52 -05:00
commit ada2fc035b
7 changed files with 65 additions and 58 deletions

View File

@ -37,15 +37,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;
@ -326,8 +335,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'],
],
},
],

View File

@ -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,

View File

@ -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,

View File

@ -154,7 +154,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
}

View File

@ -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'],
],
},

View File

@ -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,

View File

@ -168,15 +168,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,
});
@ -193,7 +195,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
@ -364,7 +366,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)}
@ -497,25 +499,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>