@georgeroman/wyvern-v2-sdk
Advanced tools
Comparing version 0.0.11 to 0.0.12
@@ -17,2 +17,4 @@ import { BigNumberish } from "@ethersproject/bignumber"; | ||
export default class SingleItemERC721OrderBuilder { | ||
static isSell(order: Order, tokenId: string): boolean; | ||
static isBuy(order: Order, tokenId: string): boolean; | ||
static sell(params: RequiredOrderParams): Order; | ||
@@ -19,0 +21,0 @@ static buy(params: RequiredOrderParams): Order; |
@@ -15,2 +15,24 @@ "use strict"; | ||
class SingleItemERC721OrderBuilder { | ||
static isSell(order, tokenId) { | ||
// Build a mock order that is for sure well-formatted | ||
const built = this.sell({ | ||
...order, | ||
tokenId, | ||
fee: 0, | ||
}); | ||
// Make sure the built order's fields match the given order | ||
return (order.calldata === built.calldata && | ||
order.replacementPattern === built.replacementPattern); | ||
} | ||
static isBuy(order, tokenId) { | ||
// Build a mock order that is for sure well-formatted | ||
const built = this.buy({ | ||
...order, | ||
tokenId, | ||
fee: 0, | ||
}); | ||
// Make sure the built order's fields match the given order | ||
return (order.calldata === built.calldata && | ||
order.replacementPattern === built.replacementPattern); | ||
} | ||
static sell(params) { | ||
@@ -17,0 +39,0 @@ return { |
import Approver from "./approver"; | ||
import OrderHelper from "./order-helper"; | ||
import Wyvern from "./wyvern"; | ||
@@ -10,3 +11,3 @@ import { Order } from "./types"; | ||
}; | ||
export { Approver, Builders, Order, Wyvern }; | ||
export { Approver, Builders, Order, OrderHelper, Wyvern }; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -6,5 +6,7 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Wyvern = exports.Builders = exports.Approver = void 0; | ||
exports.Wyvern = exports.OrderHelper = exports.Builders = exports.Approver = void 0; | ||
const approver_1 = __importDefault(require("./approver")); | ||
exports.Approver = approver_1.default; | ||
const order_helper_1 = __importDefault(require("./order-helper")); | ||
exports.OrderHelper = order_helper_1.default; | ||
const wyvern_1 = __importDefault(require("./wyvern")); | ||
@@ -11,0 +13,0 @@ exports.Wyvern = wyvern_1.default; |
import { Signer } from "@ethersproject/abstract-signer"; | ||
import { Order } from "./types"; | ||
export default class Wyvern { | ||
normalizeOrder(order: Order): Order; | ||
encodeOrder(order: Order): string; | ||
decodeOrder(order: string): Order; | ||
verifyOrderSignature(order: Order): boolean; | ||
signOrder(signer: Signer, order: Order): Promise<Order>; | ||
matchOrders(relayer: Signer, buyOrder: Order, sellOrder: Order): Promise<any>; | ||
private toRawWyvernOrder; | ||
static match(relayer: Signer, buyOrder: Order, sellOrder: Order): Promise<any>; | ||
} | ||
//# sourceMappingURL=wyvern.d.ts.map |
@@ -6,136 +6,9 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const abi_1 = require("@ethersproject/abi"); | ||
const bytes_1 = require("@ethersproject/bytes"); | ||
const constants_1 = require("@ethersproject/constants"); | ||
const contracts_1 = require("@ethersproject/contracts"); | ||
const solidity_1 = require("@ethersproject/solidity"); | ||
const wallet_1 = require("@ethersproject/wallet"); | ||
const types_1 = require("./types"); | ||
const Exchange_json_1 = __importDefault(require("./abis/Exchange.json")); | ||
const WYVERN_ORDER_FIELDS = [ | ||
"address", | ||
"address", | ||
"address", | ||
"uint", | ||
"uint", | ||
"uint", | ||
"uint", | ||
"address", | ||
"uint8", | ||
"uint8", | ||
"uint8", | ||
"address", | ||
"uint8", | ||
"bytes", | ||
"bytes", | ||
"address", | ||
"bytes", | ||
"address", | ||
"uint", | ||
"uint", | ||
"uint", | ||
"uint", | ||
"uint", // salt | ||
]; | ||
const SIGNATURE_FIELDS = [ | ||
"uint8", | ||
"bytes32", | ||
"bytes32", // s | ||
]; | ||
class Wyvern { | ||
// --------------- Public --------------- | ||
normalizeOrder(order) { | ||
// Convert all strings to lowercase and all bignumbers to strings | ||
return { | ||
exchange: order.exchange.toLowerCase(), | ||
maker: order.maker.toLowerCase(), | ||
taker: order.taker.toLowerCase(), | ||
makerRelayerFee: order.makerRelayerFee.toString(), | ||
takerRelayerFee: order.takerRelayerFee.toString(), | ||
feeRecipient: order.feeRecipient.toLowerCase(), | ||
side: order.side, | ||
saleKind: order.saleKind, | ||
target: order.target.toLowerCase(), | ||
howToCall: order.howToCall, | ||
calldata: order.calldata, | ||
replacementPattern: order.replacementPattern, | ||
staticTarget: order.staticTarget.toLowerCase(), | ||
staticExtradata: order.staticExtradata, | ||
paymentToken: order.paymentToken.toLowerCase(), | ||
basePrice: order.basePrice.toString(), | ||
extra: order.extra.toString(), | ||
listingTime: order.listingTime.toString(), | ||
expirationTime: order.expirationTime.toString(), | ||
salt: order.salt.toString(), | ||
v: order.v, | ||
r: order.r, | ||
s: order.s, | ||
}; | ||
} | ||
encodeOrder(order) { | ||
return abi_1.defaultAbiCoder.encode([ | ||
// Skip `makerProtocolFee`, `takerProtocolFee` and `feeMethod` | ||
...WYVERN_ORDER_FIELDS.filter((_, index) => ![5, 6, 8].includes(index)), | ||
...SIGNATURE_FIELDS, | ||
], [ | ||
// Skip `makerProtocolFee`, `takerProtocolFee` and `feeMethod` | ||
...this.toRawWyvernOrder(order).filter((_, index) => ![5, 6, 8].includes(index)), | ||
order.v, | ||
order.r, | ||
order.s, | ||
]); | ||
} | ||
decodeOrder(order) { | ||
const result = abi_1.defaultAbiCoder.decode([ | ||
// Remove `makerProtocolFee`, `takerProtocolFee` and `feeMethod` | ||
...WYVERN_ORDER_FIELDS.filter((_, index) => ![5, 6, 8].includes(index)), | ||
...SIGNATURE_FIELDS, | ||
], order); | ||
return { | ||
exchange: result[0], | ||
maker: result[1], | ||
taker: result[2], | ||
makerRelayerFee: result[3], | ||
takerRelayerFee: result[4], | ||
feeRecipient: result[5], | ||
side: result[6], | ||
saleKind: result[7], | ||
target: result[8], | ||
howToCall: result[9], | ||
calldata: result[10], | ||
replacementPattern: result[11], | ||
staticTarget: result[12], | ||
staticExtradata: result[13], | ||
paymentToken: result[14], | ||
basePrice: result[15], | ||
extra: result[16], | ||
listingTime: result[17], | ||
expirationTime: result[18], | ||
salt: result[19], | ||
v: result[20], | ||
r: result[21], | ||
s: result[22], | ||
}; | ||
} | ||
verifyOrderSignature(order) { | ||
const rawWyvernOrderHash = (0, solidity_1.keccak256)(WYVERN_ORDER_FIELDS, this.toRawWyvernOrder(order)); | ||
const signerAddress = (0, wallet_1.verifyMessage)((0, bytes_1.arrayify)(rawWyvernOrderHash), { | ||
v: order.v, | ||
r: order.r, | ||
s: order.s, | ||
}); | ||
return signerAddress.toLowerCase() === order.maker.toLowerCase(); | ||
} | ||
async signOrder(signer, order) { | ||
const rawWyvernOrderHash = (0, solidity_1.keccak256)(WYVERN_ORDER_FIELDS, this.toRawWyvernOrder(order)); | ||
// Sign the order hash and populate the signature fields | ||
await signer | ||
.signMessage((0, bytes_1.arrayify)(rawWyvernOrderHash)) | ||
.then(bytes_1.splitSignature) | ||
.then(({ v, r, s }) => { | ||
order = { ...order, v, r, s }; | ||
}); | ||
return order; | ||
} | ||
async matchOrders(relayer, buyOrder, sellOrder) { | ||
static async match(relayer, buyOrder, sellOrder) { | ||
if (buyOrder.side !== types_1.Side.BUY) { | ||
@@ -208,33 +81,4 @@ throw new Error("Invalid buy order side"); | ||
} | ||
// --------------- Private --------------- | ||
toRawWyvernOrder(order) { | ||
// Construct raw order including all fields needed by Wyvern | ||
return [ | ||
order.exchange, | ||
order.maker, | ||
order.taker, | ||
order.makerRelayerFee, | ||
order.takerRelayerFee, | ||
0, | ||
0, | ||
order.feeRecipient, | ||
1, | ||
order.side, | ||
order.saleKind, | ||
order.target, | ||
order.howToCall, | ||
order.calldata, | ||
order.replacementPattern, | ||
order.staticTarget, | ||
order.staticExtradata, | ||
order.paymentToken, | ||
order.basePrice, | ||
order.extra, | ||
order.listingTime, | ||
order.expirationTime, | ||
order.salt, | ||
]; | ||
} | ||
} | ||
exports.default = Wyvern; | ||
//# sourceMappingURL=wyvern.js.map |
{ | ||
"name": "@georgeroman/wyvern-v2-sdk", | ||
"version": "0.0.11", | ||
"version": "0.0.12", | ||
"description": "Wyvern V2 SDK", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
113636
35
2968