@georgeroman/wyvern-v2-sdk
Version:
Wyvern V2 SDK
112 lines • 4.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("@ethersproject/constants");
const contracts_1 = require("@ethersproject/contracts");
const types_1 = require("../types");
const Exchange_json_1 = __importDefault(require("../abis/Exchange.json"));
class WyvernHelper {
static async match(relayer, buyOrder, sellOrder) {
if (buyOrder.side !== types_1.Side.BUY) {
throw new Error("Invalid buy order side");
}
if (sellOrder.side !== types_1.Side.SELL) {
throw new Error("Invalid sell order side");
}
if (buyOrder.exchange.toLowerCase() !== sellOrder.exchange.toLowerCase()) {
throw new Error("Mismatching exchange");
}
const addrs = [
buyOrder.exchange,
buyOrder.maker,
buyOrder.taker,
buyOrder.feeRecipient,
buyOrder.target,
buyOrder.staticTarget,
buyOrder.paymentToken,
sellOrder.exchange,
sellOrder.maker,
sellOrder.taker,
sellOrder.feeRecipient,
sellOrder.target,
sellOrder.staticTarget,
sellOrder.paymentToken,
];
const uints = [
buyOrder.makerRelayerFee,
buyOrder.takerRelayerFee,
0,
0,
buyOrder.basePrice,
buyOrder.extra,
buyOrder.listingTime,
buyOrder.expirationTime,
buyOrder.salt,
sellOrder.makerRelayerFee,
sellOrder.takerRelayerFee,
0,
0,
sellOrder.basePrice,
sellOrder.extra,
sellOrder.listingTime,
sellOrder.expirationTime,
sellOrder.salt,
];
const feeMethodsSidesKindsHowToCalls = [
1,
buyOrder.side,
buyOrder.saleKind,
buyOrder.howToCall,
1,
sellOrder.side,
sellOrder.saleKind,
sellOrder.howToCall,
];
return new contracts_1.Contract(buyOrder.exchange, Exchange_json_1.default)
.connect(relayer)
.atomicMatch_(addrs, uints, feeMethodsSidesKindsHowToCalls, buyOrder.calldata, sellOrder.calldata, buyOrder.replacementPattern, sellOrder.replacementPattern, buyOrder.staticExtradata, sellOrder.staticExtradata, [buyOrder.v, sellOrder.v], [
buyOrder.r,
buyOrder.s,
sellOrder.r,
sellOrder.s,
"0x0000000000000000000000009bf09d9a82f7343222712105893183617051B976",
], {
value: sellOrder.paymentToken === constants_1.AddressZero ? buyOrder.basePrice : 0,
});
}
static async cancel(relayer, order) {
const makerAddress = order.maker;
const relayerAddress = await relayer.getAddress();
if (makerAddress.toLowerCase() !== relayerAddress.toLowerCase()) {
throw new Error("Relayer must match maker");
}
const addrs = [
order.exchange,
order.maker,
order.taker,
order.feeRecipient,
order.target,
order.staticTarget,
order.paymentToken,
];
const uints = [
order.makerRelayerFee,
order.takerRelayerFee,
0,
0,
order.basePrice,
order.extra,
order.listingTime,
order.expirationTime,
order.salt,
];
return new contracts_1.Contract(order.exchange, Exchange_json_1.default)
.connect(relayer)
.cancelOrder_(addrs, uints, 1, // feeMethod is always 1 (SplitFee)
order.side, order.saleKind, order.howToCall, order.calldata, order.replacementPattern, order.staticExtradata, order.v, order.r, order.s);
}
}
exports.default = WyvernHelper;
//# sourceMappingURL=wyvern.js.map