Wie finde ich eine Liste der Golem Network Token (GNT) TokenTrader-Verträge?

Die Golem Network Token (GNT) TokenTrader-Verträge ermöglichen den vertrauenslosen und dezentralen Verkauf von GNTs für Ether (ETH).

Ein Verkäufer stellt einen dieser TokenTraderVerträge mithilfe der TokenTraderFactory. createTradeContract(...)Methode, geben den Kurs an, zu dem sie ihre GNTs verkaufen wollen, und füllen dann den Vertrag mit GNTs auf. Eine Anleitung des ursprünglichen Autors finden Sie hier .

Ein Käufer sendet einfach ETHs an den bereitgestellten TokenTraderVertrag des Verkäufers und erhält die GNTs an die Adresse des Käufers zurück.

Weitere Informationen finden Sie auf https://www.bokconsulting.com.au/blog/trustless-token-selling-contract/ und https://www.reddit.com/r/ethtrader/comments/5cnl58/trustless_gnt_selling_contract/ .

Wie finde ich die Liste der TokenTrader-Verträge?

Antworten (1)

Aktualisierung 17. November 2016

Live-aktualisierte Vertragslisten sind jetzt unter https://cryptoderivatives.market/ verfügbar .



Sie finden das folgende Skript unter https://github.com/bokkypoobah/FindGNTTokenTrader/blob/master/findGNTTokenTrader .

#!/bin/sh

# ------------------------------------------------------------------------------
# Find Golem Network Token (GNT) Token Trader information
# 
# Works on Linux and OS/X. May work on Windows with Cygwin.
#
# Usage:
#   1. Download this script to findGNTTokenTrader
#   2. `chmod 700 findGNTTokenTrader`
#   3. Run `geth console` in a window.
#   4. Then run this script `./findGNTTokenTrader` in a separate window.
#
# More information:
#   * https://www.bokconsulting.com.au/blog/trustless-token-selling-contract/
#   * https://www.reddit.com/r/ethtrader/comments/5cnl58/trustless_gnt_selling_contract/
#
# Notes:
#   * This scripts list all deployed TokenTrader, even those deployed with some
#     errors. The Sell price and Units fields for the TokenTrade deployed
#     with errors is normally crazily incorrect
#   * If you do want to try purchasing GNTs from these contracts, test with
#     a small amount first
#
# History:
#   * Nov 14 2016 - Version 1.0
#   * Nov 14 2016 - Version 1.01 - With bookid feedback from /u/JonnyLatte
#   * Nov 14 2016 - Version 1.02 - Getting correct token balance for the 
#                                  TokenTrader contract
#   * Nov 15 2016 - Version 1.03 - Tidy
#   * Nov 15 2016 - Version 1.04 - Getting correct ether balance for the
#                                  TokenTrader contract
#   * Nov 16 2016 - Version 1.05 - CSV and filters
#
# Enjoy. (c) BokkyPooBah 2016. The MIT licence.
# ------------------------------------------------------------------------------

DATETIME=`date -u "+%Y%m%d_%H%M%S%Z"`
TMPFILENAME="/tmp/findGNTTokenTrader.txt";
TXTFILENAME="findGNTTokenTraderOutput_${DATETIME}.txt"
CSVFILENAME="findGNTTokenTraderOutput_${DATETIME}.csv";

geth attach << EOF > $TMPFILENAME

var gntTokenTraderFactoryDeploymentBlock = 2615848;
var gntTokenTraderFactoryAddress = "0xC4aF56cD5254Aef959D4BcE2F75874007808b701";
var gntBookId = "0x2fd64880bc17977672b2e25fff32b433975c4004b4fbd094936429e92f58d39f";
var gntTokenTraderFactoryABI = [{"constant":false,"inputs":[{"name":"_asset","type":"address"},{"name":"_sellPrice","type":"uint256"},{"name":"_units","type":"uint256"},{"name":"_sellsTokens","type":"bool"}],"name":"createTradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"tradeContract","type":"address"}],"name":"verify","outputs":[{"name":"valid","type":"bool"},{"name":"asset","type":"address"},{"name":"sellPrice","type":"uint256"},{"name":"units","type":"uint256"},{"name":"sellsTokens","type":"bool"}],"payable":false,"type":"function"},{"payable":false,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bookid","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"addr","type":"address"}],"name":"TradeListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bookid","type":"bytes32"},{"indexed":false,"name":"asset","type":"address"},{"indexed":false,"name":"units","type":"uint256"}],"name":"NewBook","type":"event"}];
var gntTokenTraderABI = [{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"name":"ok","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"asset","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"sellsTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"withdrawAsset","outputs":[{"name":"ok","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"units","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawToken","outputs":[{"name":"ok","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_sellsTokens","type":"bool"}],"name":"activate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_asset","type":"address"},{"name":"_sellPrice","type":"uint256"},{"name":"_units","type":"uint256"},{"name":"_sellsTokens","type":"bool"}],"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sells","type":"bool"}],"name":"ActivatedEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"UpdateEvent","type":"event"}];
var gntTokenABIFragment = [{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"}];
var erc20ABIFragment = [{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"}];
var minimumSellPrice = 0.0001;
var maximumSellPrice = 100000000;

var gntTokenTraderFactoryInterface = web3.eth.contract(gntTokenTraderFactoryABI).at(gntTokenTraderFactoryAddress);
var tradeListingEvent = gntTokenTraderFactoryInterface.TradeListing({valueA: gntBookId}, {fromBlock: gntTokenTraderFactoryDeploymentBlock, toBlock: 'latest'});
var i = 0;
var now = new Date();
console.log("Data: Listing generated at " + now.toUTCString()); 
console.log("CSV: #,TokenTraderAddress,SellsTokens,EtherPer1000Tokens,TokenBalance,Block,Deployed,TxHash,Owner,Asset,Symbol,SellPrice,Units," +
  "TokenTraderEtherBalance,OwnerEtherBalance");  
tradeListingEvent.watch(function (error, result) {
    try {
      var tokenTrader = web3.eth.contract(gntTokenTraderABI).at(result.args.addr);
      var assetAddress = tokenTrader.asset();
      var sellPrice = tokenTrader.sellPrice();
      if ("0xa74476443119a942de498590fe1f2454d7d4ac0d" == assetAddress &&
          sellPrice >= minimumSellPrice &&
          sellPrice <= maximumSellPrice) {
        console.log("Data: " + i + " TokenTrader Address: " + result.args.addr);
        var block = eth.getBlock(result.blockNumber);
        var deployedAt = new Date(block.timestamp * 1000);
        console.log("Data:   Deployed                         : #" + result.blockNumber + " at " + deployedAt.toUTCString());
        console.log("Data:   TxHash                           : " + result.transactionHash);
        console.log("Data:   Owner                            : " + result.args.owner);
        var ercInterface = web3.eth.contract(erc20ABIFragment).at(assetAddress);
        var symbol;
        try {
          symbol = ercInterface.symbol();
        } catch (e) {
          symbol = "???";
        }
        console.log("Data:   Asset address                    : " + assetAddress + " " + symbol);
        var sellsTokens = tokenTrader.sellsTokens();
        console.log("Data:   Sells tokens                     : " + sellsTokens);
        console.log("Data:   Sell price                       : " + sellPrice);
        var units = tokenTrader.units();
        console.log("Data:   Units                            : " + units);
        console.log("Data:   Ethers per 1,000 tokens          : " + sellPrice.div(units).mul(1000));
        var asset = web3.eth.contract(gntTokenABIFragment).at(assetAddress);
        // Does not work
        // var originalTokenBalance = asset.balanceOf(result.args.addr, result.blockNumber);
        // console.log("Data:   Tokens balance at creation    : " + originalTokenBalance.div(1e18));
        var tokenBalance = asset.balanceOf(result.args.addr);
        console.log("Data:   Current TokenTrader token balance: " + tokenBalance.div(1e18));
        var tokenTraderEtherBalance = eth.getBalance(result.args.addr);
        console.log("Data:   Current TokenTrader ether balance: " + tokenTraderEtherBalance.div(1e18));
        var ownerEtherBalance = eth.getBalance(result.args.owner);
        console.log("Data:   Current Owner ether balance      : " + ownerEtherBalance.div(1e18));
      
        // var updateEvent = tokenTrader.UpdateEvent({}, {fromBlock: result.blockNumber, toBlock: 'latest'});
        // updateEvent.watch(function (error1, result1) {
        //   console.log("    " + JSON.stringify(result1));
        // });
        // updateEvent.stopWatching();
        console.log("CSV: " + i + "," + result.args.addr + "," + sellsTokens + "," + 
          sellPrice.div(units).mul(1000) + "," + tokenBalance.div(1e18) + "," + 
          result.blockNumber + "," + deployedAt.toUTCString() + "," + 
          result.transactionHash + "," + result.args.owner + "," + 
          assetAddress + "," + symbol + "," + sellPrice + "," + units + "," +           
          tokenTraderEtherBalance.div(1e18) + "," + ownerEtherBalance.div(1e18));
        console.log(i++ + ": " + JSON.stringify(result));
      }
    } catch (e) {
      console.log("Data:   Cannot get details for TokenTrader " + e);
    }
});
tradeListingEvent.stopWatching();

EOF

grep "Data:" $TMPFILENAME | sed "s/Data: //" > $TXTFILENAME
grep "CSV:" $TMPFILENAME | sed "s/CSV: //" | grep -v "false" > $CSVFILENAME

Anmerkungen

  • Diese Skripte listen alle bereitgestellten TokenTrader auf, auch diejenigen, die mit einigen Fehlern bereitgestellt wurden. Die Felder Verkaufspreis und Einheiten für den mit Fehlern bereitgestellten TokenTrade sind normalerweise verrückt falsch.
  • Wenn Sie versuchen möchten, GNTs aus diesen Verträgen zu kaufen, testen Sie zuerst mit einer kleinen Menge.
  • Dies ist nur ein Werkzeug, um die Verträge zu finden. Ihre Nutzung der Verträge erfolgt in eigener Verantwortung!

Die neueste Auflistung im Tabellenformat https://github.com/bokkypoobah/FindGNTTokenTrader/blob/master/findGNTTokenTraderOutput_20161115_200640UTC.csv , mit dem aktiven Markt unten:

#,TokenTraderAddress,SellsTokens,EtherPer1000Tokens,TokenBalance
26,0x4b17f65fc6450cbcced9e893dd84123a5fc13362,TRUE,1.45,154913.0693
27,0x1e00980cb7b109d290fcf6c4e579debb8c836c39,TRUE,1.45,329983.1034
24,0x1a22bb6827dbb7df60a6de726519c2a509271695,TRUE,1.5,580393.55
6,0xc0081f0e16cbceec6df8e63986212a52ee493540,TRUE,1.88,102821.2909
23,0x406a65de7a2e94ef19597a79296e269fada85a71,TRUE,1.9,136166.8742
15,0x5eb860c816789bb52300a0675300701eca203cf8,TRUE,1.95,158854.1026
0,0x399156ee3339f4b29a53e307b98cce09fda3bac7,TRUE,2,5430.015
10,0xa7f8da2594eaf1e8573a5974be6028f64157cd7a,TRUE,2,713516
22,0xf31057bc0ff5e3e3b32652b29c0451624392567c,TRUE,2,100050
25,0xffd41efe3d3c073f4c7dbf2cec7c19111fc7523e,TRUE,2,4250
17,0x6e3f7ad4d9accb12452744fb2785ecac31ea8026,TRUE,2.05,50000
18,0x4b34da26bfb35d3089c455cb483a5fff8695d447,TRUE,2.11,200000
11,0x42be3b481f25b0148cd1a144d8ca22cda5b677e7,TRUE,2.33,9.00E-12
2,0x4104e4b12e73bc99dd4f20a39525d07aa395c0d4,TRUE,3,1794.833333
19,0x593fd4a14f64282891a1369442462361a1908b01,TRUE,3.75,900