Bid
Bid
Create Bid
A bid can be created with this command.
Commands
ACCEPT_TX
is an unsigned raw transaction in hex spending the listing UTXO, sending it to the bidder.
FULFIL_TX
is a signed raw transaction in hex that fulfills the trade, paying the BTC to the lister and paying the tokens to the bidder.
ORDER_ID_1
is the UTXO the listing is bound to.
PURCHASE_AMOUNT_1
is the quantity of the token being bid on.
PURCHASE_PRICE_1
is price per token of the token being bid on.
RES_UTXO_1
is the UTXO where the tokens are bound to.
Single Bid
<TXID,
ACCEPT_TX,
FULFIL_TX,
{CONTRACT_ID_1:BID[
[ORDER_ID_1, PURCHASE_AMOUNT_1, PURCHASE_PRICE_1, RES_UTXO_1],
[ORDER_ID_2, PURCHASE_AMOUNT_2, PURCHASE_PRICE_2, RES_UTXO_2],
...,
[ORDER_ID_N, PURCHASE_AMOUNT_N, PURCHASE_PRICE_N, RES_UTXO_N]]}>
Batched Bid
<TXID,
ACCEPT_TX,
FULFIL_TX,
{CONTRACT_ID_1:BID[
[ORDER_ID_1, PURCHASE_AMOUNT_1, PURCHASE_PRICE_1, RES_UTXO_1],
[ORDER_ID_2, PURCHASE_AMOUNT_2, PURCHASE_PRICE_2, RES_UTXO_2],
...,
[ORDER_ID_N, PURCHASE_AMOUNT_N, PURCHASE_PRICE_N, RES_UTXO_N]]},
{CONTRACT_ID_2:BID[
[ORDER_ID_1, PURCHASE_AMOUNT_1, PURCHASE_PRICE_1, RES_UTXO_1],
[ORDER_ID_2, PURCHASE_AMOUNT_2, PURCHASE_PRICE_2, RES_UTXO_2],
...,
[ORDER_ID_N, PURCHASE_AMOUNT_N, PURCHASE_PRICE_N, RES_UTXO_N]]},
...,
{CONTRACT_ID_N:BID[
[ORDER_ID_1, PURCHASE_AMOUNT_1, PURCHASE_PRICE_1, RES_UTXO_1],
[ORDER_ID_2, PURCHASE_AMOUNT_2, PURCHASE_PRICE_2, RES_UTXO_2],
...,
[ORDER_ID_N, PURCHASE_AMOUNT_N, PURCHASE_PRICE_N, RES_UTXO_N]]}>
Examples
Single Bid
<456d3dcf23a55636a0f0683c2c8f5e9b53a787857b7ffc11be64c288a564c15d,
{3b1b20518485ec89ce9acf5bb23c5ccdb0ac26d0661e377014e894d295eec29e:BID[
[9859b9e8d3d1a343819f22876c74fc3b304438083f005378f7e64085c7c5bf27:0,
100000000,
30000,
TXID:0]]}>
Batched Bid
<2947627925e5b3df4c5597c23242f145d129f89bd1ca9b13b68113303f229431,
02000000010665f30a264ee20cebc431d850802bdf74b02b687a351afa3d00a680121620320100000000ffffffff0226020000000000001600148f464c1f30973fd56cfeb29038a77bc9f729eddc0000000000000000226a20ad6937747b0d5d015f4259c904b4112a7ec821c07ba6cee3960b781173148fcc00000000,
020000000001023194223f301381b6139bcad19bf829d145f14232c297554cdfb3e525796247290000000000ffffffffdfbc66bfe18c9ad005a2541fb8f4be3e1ded2c62a2cd968c3547f8c8a2b3de8a0000000000ffffffff0426020000000000001600148f464c1f30973fd56cfeb29038a77bc9f729eddcd007000000000000160014192e37f6b6bff95093f11400553355882450ea3a2602000000000000160014192e37f6b6bff95093f11400553355882450ea3a0000000000000000226a2001aebd6d901368e26497230a932132f74fd828c797547067e244ac93db70eef8024730440220279c8fc5057f891129dc82f009605f7e8ac0a19fbcadf216ff24b472f8f5991b022034848bb306668e032a0018e19b4a1dc5231992527c8b9a8b4e2adebd5c5d05a701210230b19ebf19c082e890a32f125d729dcb806995c662dc99c3e9b3be8651d310bf02483045022100dd6d197b843af3fe01b493a521e7d04d53598f5d4a9e6eaaa8cb30c694301cc002202001d69a40e196c732d3027ba425f29d744241961e394b4434c6263f0a35887d01210230b19ebf19c082e890a32f125d729dcb806995c662dc99c3e9b3be8651d310bf00000000,
{38d40dfbcc39069c5b9dd7225ecfa9ef2140ebd2dca962328c30f922d74f776e:BID[
[159b63cb83892ee7c5d85b997ec4dc67b4e71b79467f20043a51b3731e06ad42:8,
100000000,
2000,
TXID:0]]},
{75f0d0ab533400eaf9f96d2c417073f71d77d775bfd1b7929bdcea897f08c88e:BID[
[9ad0031f5c4fcd208c3329b7b63b48cb8f263b1ab40d2e529857ae73c2e2f2f6:2,
2500000000,
100,
TXID:1]]}>
Implementations
Rust
pub fn bid(&mut self, txid: &String, payload: &String, bids: Vec<Bid>, bidding_ids: &Vec<String>, current_block_height: i32) -> Result<i32, String> {
let mut listings_available = match self.listings.clone() {
Some(listings_available) => listings_available,
None => return Err("bid: no listings for contract".to_string()),
};
let mut bids_available = match self.bids.clone() {
Some(bids_available) => bids_available,
None => HashMap::new(),
};
for (i, _) in bids.iter().enumerate() {
if listings_available.clone().contains_key(&bids[i].order_id) {
if bids[i].bid_amount > listings_available[&bids[i].order_id].list_amt {
continue;
}
if bids[i].bid_amount/ 10u64.pow(self.decimals as u32) * bids[i].bid_price >= listings_available[&bids[i].order_id].list_amt / 10u64.pow(self.decimals as u32) * listings_available[&bids[i].order_id].price{
let mut listing = listings_available[&bids[i].order_id].clone();
listing.valid_bid_block = Some(current_block_height);
listings_available.insert(bids[i].order_id.to_string(), listing);
self.listings = Some(listings_available.clone());
}
bids_available.insert(bidding_ids[i].to_string(), bids[i].clone());
self.bids = Some(bids_available.clone());
}
}
self.payloads.insert(txid.to_string(), payload.to_string());
return Ok(0);
}
Cancel Bid
A bid can be cancelled with this command.
Command
BID_UTXO
is the UTXO the Bid is bound to.
<TXID,
{CONTRACT_ID_1:CANCELBID[
BID_UTXO]}>
Examples
<243afbb1aa0c3e04f8b165416d3ee02ce175f22dae1b997d7ba06d12e88e388f,
{9ad0031f5c4fcd208c3329b7b63b48cb8f263b1ab40d2e529857ae73c2e2f2f6:CANCELBID[
2947627925e5b3df4c5597c23242f145d129f89bd1ca9b13b68113303f229431:1]}>
Implementations
Rust
pub fn cancel_bid(&mut self, txid: &String, bidding_utxo: &String, payload: String) -> Result<i32, String> {
let mut bids_available = match self.bids.clone() {
Some(bids_available) => bids_available,
None => return Err("cancel_bid: no bids for contract".to_string()),
};
let fulfillments = match self.fulfillments.clone() {
Some(fulfillments) => fulfillments,
None => HashMap::new(),
};
match self.listings.clone() {
Some(listings) => listings,
None => return Err("cancel_bid: no listings for contract".to_string()),
};
let mut bid_id = String::new();
for (key, value) in bids_available.clone() {
if value.reseved_utxo == bidding_utxo.to_string() {
bid_id = key.clone();
break;
}
}
if fulfillments.contains_key(&bid_id) {
return Err("cancel_bid: order has been fulfilled".to_string());
}
bids_available.remove(&bid_id);
self.bids = Some(bids_available.clone());
self.payloads.insert(txid.to_string(), payload);
return Ok(0);
}
Last updated