You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
623 lines
25 KiB
623 lines
25 KiB
/******************************************************************************
|
|
* Copyright © 2014-2017 The SuperNET Developers. *
|
|
* *
|
|
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
|
|
* the top-level directory of this distribution for the individual copyright *
|
|
* holder information and the developer policies on copyright and licensing. *
|
|
* *
|
|
* Unless otherwise agreed in a custom licensing agreement, no part of the *
|
|
* SuperNET software, including this file may be copied, modified, propagated *
|
|
* or distributed except according to the terms contained in the LICENSE file *
|
|
* *
|
|
* Removal or modification of this copyright notice is prohibited. *
|
|
* *
|
|
******************************************************************************/
|
|
|
|
#ifndef H_IGUANASTRUCTS_H
|
|
#define H_IGUANASTRUCTS_H
|
|
|
|
#ifdef WIN32
|
|
#define PACKEDSTRUCT
|
|
#else
|
|
#define PACKEDSTRUCT __attribute__((packed))
|
|
#endif
|
|
|
|
struct iguana_thread
|
|
{
|
|
struct queueitem DL;
|
|
pthread_t handle;
|
|
struct iguana_info *coin;
|
|
char name[16];
|
|
uint8_t type;
|
|
iguana_func funcp;
|
|
void *arg;
|
|
};
|
|
|
|
struct iguana_blockreq { struct queueitem DL; bits256 hash2,*blockhashes; struct iguana_bundle *bp; int32_t n,height,bundlei; };
|
|
|
|
struct iguana_peermsgrequest { struct queueitem DL; struct iguana_peer *addr; bits256 hash2; int32_t type; };
|
|
|
|
struct iguana_chain
|
|
{
|
|
//const int32_t chain_id;
|
|
char name[32],symbol[16],messagemagic[64];
|
|
uint8_t pubtype,p2shtype,wiftype,netmagic[4];
|
|
char *genesis_hash,*genesis_hex; // hex string
|
|
uint16_t portp2p,rpcport;
|
|
uint8_t isPoS,unitval;
|
|
uint64_t rewards[512][2];
|
|
uint8_t genesis_hashdata[32],minconfirms;
|
|
uint16_t bundlesize,hasheaders;
|
|
char gethdrsmsg[16];
|
|
uint64_t txfee,minoutput,dust,halvingduration,initialreward;
|
|
blockhashfunc hashalgo;
|
|
char userhome[512],serverport[128],userpass[1024];
|
|
char use_addmultisig,do_opreturn;
|
|
int32_t estblocktime,protover;
|
|
bits256 genesishash2,PoWtarget,PoStargets[16]; int32_t numPoStargets,PoSheights[16];
|
|
uint8_t zcash,fixit,auxpow,debug,havecltv,alertpubkey[65];
|
|
uint16_t targetspacing,targettimespan; uint32_t nBits,normal_txversion,locktime_txversion;
|
|
};
|
|
|
|
struct iguana_msgaddress { uint32_t nTime; uint64_t nServices; uint8_t ip[16]; uint16_t port; }PACKEDSTRUCT;
|
|
|
|
struct iguana_msgversion
|
|
{
|
|
uint32_t nVersion;
|
|
uint64_t nServices;
|
|
int64_t nTime;
|
|
struct iguana_msgaddress addrTo,addrFrom;
|
|
uint64_t nonce;
|
|
char strSubVer[80];
|
|
uint32_t nStartingHeight;
|
|
uint8_t relayflag;
|
|
}PACKEDSTRUCT;
|
|
|
|
struct iguana_msgalert // warning, many varints/variable length fields, struct is 1:1
|
|
{
|
|
int32_t version;
|
|
int64_t relayuntil,expiration;
|
|
int32_t ID,cancel;
|
|
uint32_t numcancellist;
|
|
int32_t minver,maxver;
|
|
uint32_t setsubvervar; char subver[1024];
|
|
int32_t priority;
|
|
char comment[1024],statusbar[1024],reserved[1024];
|
|
uint8_t siglen,sig[74];
|
|
uint32_t list[64];
|
|
};
|
|
|
|
struct iguana_VPNversion
|
|
{
|
|
uint32_t nVersion;
|
|
uint64_t nServices;
|
|
int64_t nTime;
|
|
struct iguana_msgaddress addrTo,addrFrom;
|
|
uint64_t nonce;
|
|
char strSubVer[80];
|
|
uint32_t nStartingHeight;
|
|
uint32_t iVer,v_Network_id; uint16_t wPort; uint8_t bIsGui; uint16_t wCtPort,wPrPort;
|
|
} PACKEDSTRUCT;
|
|
|
|
struct iguana_msgblockhdr
|
|
{
|
|
uint32_t version;
|
|
bits256 prev_block,merkle_root;
|
|
uint32_t timestamp,bits,nonce;
|
|
} PACKEDSTRUCT;
|
|
|
|
#define ZKSNARK_PROOF_SIZE 296
|
|
#define ZCASH_SOLUTION_ELEMENTS 1344
|
|
|
|
struct iguana_msgzblockhdr
|
|
{
|
|
uint32_t version;
|
|
bits256 prev_block,merkle_root,reserved;
|
|
uint32_t timestamp,bits;
|
|
bits256 bignonce;
|
|
uint8_t var_numelements[3];
|
|
uint8_t solution[ZCASH_SOLUTION_ELEMENTS];
|
|
} PACKEDSTRUCT;
|
|
|
|
/*int32_t nVersion;
|
|
uint256 hashPrevBlock;
|
|
uint256 hashMerkleRoot;
|
|
uint256 hashReserved;
|
|
uint32_t nTime;
|
|
uint32_t nBits;
|
|
uint256 nNonce;
|
|
std::vector<unsigned char> nSolution;*/
|
|
|
|
/*struct iguana_msgblockhdr_zcash
|
|
{
|
|
bits256 bignonce;
|
|
uint8_t numelements;
|
|
uint32_t solution[ZCASH_SOLUTION_ELEMENTS];
|
|
//bits256 reserved; // only here if auxpow is set
|
|
}PACKEDSTRUCT;*/
|
|
|
|
struct iguana_msgmerkle
|
|
{
|
|
uint32_t branch_length;
|
|
bits256 branch_hash[4096];
|
|
uint32_t branch_side_mask;
|
|
}; //PACKEDSTRUCT;
|
|
|
|
struct iguana_msgblock
|
|
{
|
|
struct iguana_msgblockhdr H; // double hashed for blockhash
|
|
uint32_t txn_count;
|
|
} PACKEDSTRUCT;
|
|
|
|
struct iguana_msgzblock
|
|
{
|
|
struct iguana_msgzblockhdr zH; // double hashed for blockhash
|
|
uint32_t txn_count;
|
|
} PACKEDSTRUCT;
|
|
|
|
struct iguana_msgvin { bits256 prev_hash; uint8_t *vinscript,*userdata,*spendscript,*redeemscript; uint32_t prev_vout,sequence; uint16_t scriptlen,p2shlen,userdatalen,spendlen; }; //PACKEDSTRUCT;
|
|
|
|
struct iguana_msgvout { uint64_t value; uint32_t pk_scriptlen; uint8_t *pk_script; }; //PACKEDSTRUCT;
|
|
|
|
struct iguana_msgtx
|
|
{
|
|
uint32_t version,tx_in,tx_out,lock_time;
|
|
struct iguana_msgvin *vins;
|
|
struct iguana_msgvout *vouts;
|
|
bits256 txid;
|
|
int32_t allocsize,timestamp,numinputs,numoutputs;
|
|
int64_t inputsum,outputsum,txfee;
|
|
uint8_t *serialized;
|
|
};// PACKEDSTRUCT;
|
|
|
|
struct iguana_msgjoinsplit
|
|
{
|
|
uint64_t vpub_old,vpub_new;
|
|
bits256 anchor,nullifiers[2],commitments[2],ephemeralkey;
|
|
bits256 randomseed,vmacs[2];
|
|
uint8_t zkproof[ZKSNARK_PROOF_SIZE];
|
|
uint8_t ciphertexts[2][601];
|
|
}PACKEDSTRUCT;
|
|
|
|
struct iguana_packet { struct queueitem DL; struct iguana_peer *addr; struct tai embargo; int32_t datalen,getdatablock; uint8_t serialized[]; };
|
|
|
|
struct msgcounts { uint32_t version,verack,getaddr,addr,inv,getdata,notfound,getblocks,getheaders,headers,tx,block,mempool,ping,pong,reject,filterload,filteradd,filterclear,merkleblock,alert; };
|
|
|
|
//struct iguana_fileitem { bits256 hash2; struct iguana_txdatabits txdatabits; };
|
|
|
|
struct iguana_kvitem { UT_hash_handle hh; uint8_t keyvalue[]; };
|
|
|
|
struct iguana_iAddr
|
|
{
|
|
UT_hash_handle hh; uint64_t ipbits;
|
|
uint32_t lastkilled,lastconnect;
|
|
int32_t status,height,numkilled,numconnects;
|
|
};
|
|
|
|
struct iguana_cacheptr { struct queueitem DL; int32_t allocsize,recvlen; uint8_t *data; };
|
|
|
|
// iguana blocks
|
|
struct iguana_blockRO
|
|
{
|
|
bits256 hash2,prev_block,merkle_root;
|
|
uint32_t timestamp,nonce,bits,version;
|
|
uint32_t firsttxidind,firstvin,firstvout,firstpkind,firstexternalind,recvlen:24,tbd:8;
|
|
uint16_t txn_count,numvouts,numvins,allocsize;
|
|
}PACKEDSTRUCT;
|
|
|
|
struct iguana_zcashRO { bits256 bignonce; uint32_t numelements; uint8_t solution[ZCASH_SOLUTION_ELEMENTS]; } PACKEDSTRUCT;
|
|
|
|
struct iguana_zblockRO
|
|
{
|
|
struct iguana_blockRO RO;
|
|
struct iguana_zcashRO zRO;
|
|
} PACKEDSTRUCT;
|
|
|
|
#define iguana_blockfields double PoW; \
|
|
int32_t height,fpos; uint32_t fpipbits,issued,lag:17,sigsvalid:1,protected:1,peerid:12,processed:1; \
|
|
uint16_t hdrsi:15,mainchain:1; int16_t bundlei:12,valid:1,queued:1,txvalid:1,newtx:1; \
|
|
UT_hash_handle hh; struct iguana_bundlereq *req; \
|
|
struct iguana_blockRO RO
|
|
|
|
struct iguana_block
|
|
{
|
|
iguana_blockfields;
|
|
struct iguana_zcashRO zRO[];
|
|
} ;
|
|
|
|
struct iguana_zblock // mu
|
|
{
|
|
iguana_blockfields; // this is to minimize code needed to support both types
|
|
struct iguana_zcashRO zRO; // if zRO is changed, the RO part must also be updated
|
|
} ;
|
|
|
|
#define IGUANA_LHASH_BLOCKS 0
|
|
#define IGUANA_LHASH_TXIDS 1 //
|
|
#define IGUANA_LHASH_UNSPENTS 2 //
|
|
#define IGUANA_LHASH_SPENDS 3 //
|
|
#define IGUANA_LHASH_PKHASHES 4 //
|
|
#define IGUANA_LHASH_ACCOUNTS 5 //
|
|
#define IGUANA_LHASH_EXTERNALS 6 //
|
|
#define IGUANA_LHASH_KSPACE 7 //
|
|
#define IGUANA_LHASH_TXBITS 8 //
|
|
#define IGUANA_LHASH_PKBITS 9 //
|
|
#define IGUANA_NUMLHASHES (IGUANA_LHASH_PKBITS + 1)
|
|
|
|
struct iguana_counts
|
|
{
|
|
uint32_t firsttxidind,firstunspentind,firstspendind,firstpkind;
|
|
uint64_t credits,debits;
|
|
struct iguana_block block;
|
|
} PACKEDSTRUCT;
|
|
|
|
struct iguana_blocks
|
|
{
|
|
char coin[16];
|
|
struct iguanakv *db;
|
|
struct iguana_block *hash;
|
|
int32_t maxblocks,initblocks,hashblocks,pending,issuedblocks,recvblocks,emitblocks,parsedblocks,dirty;
|
|
struct iguana_zblock hwmchain,prev,prev2;
|
|
};
|
|
|
|
struct iguana_ledger
|
|
{
|
|
struct iguana_counts snapshot;
|
|
//struct iguana_account accounts[];
|
|
} PACKEDSTRUCT;
|
|
|
|
// ramchain temp file structures
|
|
struct iguana_unspent20 { uint64_t value; uint32_t scriptpos,txidind:28,type:4; uint16_t scriptlen,fileid; uint8_t rmd160[20]; }PACKEDSTRUCT;
|
|
struct iguana_spend256 { bits256 prevhash2; uint64_t scriptpos:48,vinscriptlen:16; uint32_t sequenceid; int16_t prevout; uint16_t spendind,fileid; }PACKEDSTRUCT;
|
|
|
|
// permanent readonly structs
|
|
struct iguana_txid { bits256 txid; uint64_t txidind:29,firstvout:28,firstvin:28,bundlei:11,locktime:32,version:32,timestamp:32,extraoffset:32; uint16_t numvouts,numvins; }PACKEDSTRUCT;
|
|
|
|
struct iguana_unspent { uint64_t value; uint32_t txidind,pkind,prevunspentind,scriptpos,scriptlen:13,fileid:14,type:5; uint16_t hdrsi; int16_t vout; } PACKEDSTRUCT;
|
|
|
|
struct iguana_spend { uint64_t scriptpos:48,scriptlen:16; uint32_t spendtxidind,sequenceid; int16_t prevout; uint16_t fileid:14,external:1,tbd:1; }PACKEDSTRUCT; // numsigs:4,numpubkeys:4,p2sh:1,sighash:4
|
|
|
|
struct iguana_pkhash { uint8_t rmd160[20]; uint32_t pkind; }PACKEDSTRUCT; //firstunspentind,pubkeyoffset
|
|
|
|
// dynamic
|
|
struct iguana_account { int64_t total; uint32_t lastunspentind; }PACKEDSTRUCT;
|
|
struct iguana_utxo { uint32_t fromheight:31,lockedflag:1,prevunspentind:31,spentflag:1,spendind; }PACKEDSTRUCT;
|
|
|
|
#ifdef DEPRECATED_HHUTXO
|
|
struct iguana_hhaccount { UT_hash_handle hh; uint64_t pval; struct iguana_account a; }PACKEDSTRUCT;
|
|
#endif
|
|
struct iguana_hhutxo { UT_hash_handle hh; uint64_t uval; struct iguana_utxo u; };
|
|
struct iguana_utxoaddr { UT_hash_handle hh; uint64_t histbalance; uint32_t pkind:30,p2sh:1,searchedhist:1; uint16_t hdrsi; uint8_t rmd160[20]; };
|
|
|
|
// GLOBAL one zero to non-zero write (unless reorg)
|
|
struct iguana_spendvector { uint64_t value; uint32_t pkind,unspentind; int32_t fromheight; uint16_t hdrsi:15,tmpflag:1; }PACKEDSTRUCT; // unspentind
|
|
//struct iguana_pkextra { uint32_t firstspendind; } PACKEDSTRUCT; // pkind
|
|
|
|
struct iguana_txblock
|
|
{
|
|
uint32_t numtxids,numunspents,numspends,extralen,recvlen;
|
|
// following set during second pass (still in peer context)
|
|
uint32_t numpkinds,numexternaltxids,datalen,pkoffset;
|
|
uint8_t space[256]; // order: extra[], T, U, S, P, external txids
|
|
struct iguana_zblock zblock;
|
|
};
|
|
|
|
#if defined(_M_X64)
|
|
/*
|
|
* calculate the address in a portable manner
|
|
* in all platform sizeof(char) / sizeof(uchar) == 1
|
|
* @author - fadedreamz@gmail.com
|
|
*/
|
|
#define RAMCHAIN_PTR(rdata,offset) ((void *)((unsigned char *)rdata + rdata->offset))
|
|
#else
|
|
#define RAMCHAIN_PTR(rdata,offset) ((void *)(long)((long)(rdata) + (long)(rdata)->offset))
|
|
#endif
|
|
|
|
struct iguana_ramchaindata
|
|
{
|
|
bits256 sha256;
|
|
bits256 lhashes[IGUANA_NUMLHASHES],firsthash2,prevhash2;
|
|
int64_t allocsize,Boffset,Toffset,Uoffset,Soffset,Poffset,Aoffset,Xoffset,TXoffset,PKoffset,Koffset;
|
|
int32_t numblocks,height,firsti,hdrsi,txsparsebits,pksparsebits;
|
|
uint32_t numtxids,numunspents,numspends,numpkinds,numexternaltxids,numtxsparse,numpksparse,scriptspace,stackspace;
|
|
uint8_t rdata[];
|
|
};
|
|
|
|
struct iguana_ramchain_hdr
|
|
{
|
|
uint32_t txidind,unspentind,spendind,scriptoffset,stacksize; uint16_t hdrsi,bundlei:15,ROflag:1;
|
|
struct iguana_ramchaindata *data;
|
|
};
|
|
|
|
struct iguana_ramchain
|
|
{
|
|
struct iguana_ramchain_hdr H; bits256 lasthash2; uint64_t datasize,allocatedA2,allocatedU2;
|
|
uint32_t numblocks:31,expanded:1,pkind,externalind,height,numXspends;
|
|
long sparseadds,sparsesearches,sparseadditers,sparsesearchiters,sparsehits,sparsemax;
|
|
struct iguana_kvitem *txids,*pkhashes;
|
|
struct OS_memspace *hashmem; long filesize,sigsfilesize,debitsfilesize,lastspendsfilesize;
|
|
void *fileptr,*sigsfileptr,*Xspendptr,*debitsfileptr,*lastspendsfileptr;
|
|
char from_ro,from_roX,from_roA,from_roU;
|
|
struct iguana_account *A,*A2,*creditsA; struct iguana_spendvector *Xspendinds;
|
|
struct iguana_utxo *Uextras; uint8_t *txbits; struct iguana_txid *cacheT;
|
|
//int16_t permutation[IGUANA_MAXBUNDLES];
|
|
//struct iguana_Uextra *U2,*roU2; struct iguana_pkextra *P2,*roP2;
|
|
};
|
|
|
|
struct iguana_peer
|
|
{
|
|
struct queueitem DL;
|
|
queue_t sendQ;
|
|
bits256 iphash,pubkey,persistent; uint32_t lastpersist; uint8_t netmagic[4];
|
|
struct iguana_msgaddress A;
|
|
char ipaddr[64],lastcommand[16],coinname[64],symbol[64];
|
|
uint64_t pingnonce,totalsent,totalrecv,ipbits; double pingtime,sendmillis,pingsum,getdatamillis;
|
|
uint32_t lastcontact,sendtime,ready,startsend,startrecv,pending,lastgotaddr,lastblockrecv,pendtime,lastflush,lastpoll,myipbits,persistent_peer,protover,numrecverrs;
|
|
int32_t supernet,basilisk,dead,addrind,usock,lastheight,relayflag,numpackets,numpings,ipv6,height,rank,pendhdrs,pendblocks,recvhdrs,lastlefti,validpub,othervalid,dirty[2],laggard,headerserror,lastsent,isrelay;
|
|
double recvblocks,recvtotal;
|
|
int64_t allocated,freed;
|
|
bits256 RThashes[IGUANA_MAXBUNDLESIZE]; int32_t numRThashes;
|
|
struct msgcounts msgcounts;
|
|
struct OS_memspace RAWMEM,TXDATA,HASHMEM;
|
|
struct iguana_ramchain ramchain;
|
|
//struct iguana_fileitem *filehash2; int32_t numfilehash2,maxfilehash2;
|
|
FILE *voutsfp,*vinsfp;
|
|
uint8_t *blockspace;//[IGUANA_MAXPACKETSIZE + 8192];
|
|
#ifdef IGUANA_PEERALLOC
|
|
struct OS_memspace *SEROUT[128];
|
|
#endif
|
|
};
|
|
|
|
struct iguana_peers
|
|
{
|
|
bits256 lastrequest;
|
|
struct iguana_peer active[IGUANA_MAXPEERS+1],*ranked[IGUANA_MAXPEERS+1],*localaddr;
|
|
struct iguana_thread *peersloop,*recvloop; pthread_t *acceptloop;
|
|
double topmetrics[IGUANA_MAXPEERS+1],avemetric;
|
|
uint32_t numranked,mostreceived,shuttingdown,lastpeer,lastmetrics,numconnected;
|
|
int32_t numfiles;
|
|
};
|
|
|
|
struct iguana_bloom16 { uint8_t hash2bits[65536 / 8]; };
|
|
struct iguana_bloominds { uint16_t inds[8]; };
|
|
|
|
struct iguana_bundle
|
|
{
|
|
struct queueitem DL; struct iguana_info *coin; struct iguana_bundle *nextbp;
|
|
struct iguana_bloom16 bloom; int64_t totaldurations,duplicatedurations; int32_t durationscount,duplicatescount;
|
|
uint32_t issuetime,hdrtime,emitfinish,mergefinish,purgetime,queued,startutxo,balancefinish,validated,lastspeculative,dirty,nexttime,currenttime,lastprefetch,lastRT,missingstime,unsticktime,converted,utxofinish;
|
|
int32_t numhashes,numrecv,numsaved,numcached,generrs,currentflag,origmissings,numissued,Xvalid;
|
|
int32_t minrequests,n,hdrsi,bundleheight,numtxids,numspends,numunspents,numspec,isRT;
|
|
double avetime,threshold,metric; uint64_t datasize,estsize;
|
|
struct iguana_block *blocks[IGUANA_MAXBUNDLESIZE];
|
|
uint8_t *speculativecache[IGUANA_MAXBUNDLESIZE],haveblock[IGUANA_MAXBUNDLESIZE/3+1];
|
|
uint32_t issued[IGUANA_MAXBUNDLESIZE],firsttxidinds[IGUANA_MAXBUNDLESIZE];
|
|
bits256 prevbundlehash2,hashes[IGUANA_MAXBUNDLESIZE+1],nextbundlehash2,allhash,*speculative,validatehash;
|
|
struct iguana_ramchain ramchain; uint8_t red,green,blue;
|
|
struct iguana_spendvector *tmpspends; int32_t numtmpspends;
|
|
uint64_t *weights,supply; int32_t numweights;
|
|
};
|
|
|
|
struct iguana_bundlereq
|
|
{
|
|
struct queueitem DL; struct iguana_info *coin; int32_t type;
|
|
struct iguana_peer *addr; struct iguana_zblock *blocks; bits256 *hashes,txid;
|
|
//struct iguana_txdatabits txdatabits;
|
|
struct iguana_msghdr H;
|
|
int32_t allocsize,datalen,n,recvlen,numtx; uint32_t ipbits;
|
|
struct iguana_zblock zblock;
|
|
uint8_t copyflag,serializeddata[];
|
|
};
|
|
|
|
struct iguana_bitmap { int32_t width,height,amplitude; char name[52]; uint8_t data[IGUANA_WIDTH*IGUANA_HEIGHT*3]; };
|
|
|
|
struct basilisk_spend { bits256 txid,spentfrom; uint64_t relaymask,value; uint32_t timestamp; int32_t vini,vout,height,unspentheight,ismine; char destaddr[64],symbol[16]; };
|
|
|
|
struct basilisk_unspent { bits256 txid; uint64_t value,relaymask; uint32_t unspentind,timestamp; int32_t RTheight,height,spentheight; int16_t status,hdrsi,vout,spendlen; char symbol[16]; uint8_t script[256]; };
|
|
|
|
struct iguana_waddress { UT_hash_handle hh; uint64_t balance; uint16_t scriptlen; uint8_t rmd160[20],pubkey[33],wiftype,addrtype; bits256 privkey; char symbol[16],coinaddr[36],wifstr[54]; uint8_t redeemScript[]; };
|
|
struct iguana_waccount { UT_hash_handle hh; struct iguana_waddress *waddr,*current; char account[]; };
|
|
struct iguana_wallet { UT_hash_handle hh; struct iguana_waccount *wacct; };
|
|
|
|
struct scriptinfo { UT_hash_handle hh; uint32_t fpos; uint16_t scriptlen; uint8_t script[]; };
|
|
struct hhbits256 { UT_hash_handle hh; bits256 txid; int32_t height; uint16_t firstvout; };
|
|
|
|
struct iguana_monitorinfo { bits256 txid; int32_t numreported; uint8_t peerbits[IGUANA_MAXPEERS >> 3]; };
|
|
|
|
struct iguana_RTunspent
|
|
{
|
|
uint8_t rmd160[20];
|
|
int64_t value;
|
|
int32_t vout,height,fromheight;
|
|
struct iguana_RTtxid *parent;
|
|
struct iguana_RTspend *spend;
|
|
struct iguana_RTunspent *prevunspent;
|
|
int16_t scriptlen;
|
|
uint8_t locked,validflag;
|
|
uint8_t script[];
|
|
};
|
|
|
|
struct iguana_RTspend
|
|
{
|
|
bits256 prev_hash;
|
|
struct iguana_RTunspent *bundle_unspent;
|
|
int16_t prev_vout,scriptlen;
|
|
uint8_t vinscript[];
|
|
};
|
|
|
|
struct iguana_RTaddr
|
|
{
|
|
UT_hash_handle hh;
|
|
char coinaddr[64];
|
|
int64_t histbalance,debits,credits;
|
|
int32_t numunspents;
|
|
struct iguana_RTunspent *lastunspent;
|
|
};
|
|
|
|
struct iguana_RTtxid
|
|
{
|
|
UT_hash_handle hh; struct iguana_info *coin; struct iguana_block *block;
|
|
bits256 txid;
|
|
int32_t height,txi,txn_count,numvouts,numvins,txlen;
|
|
uint32_t locktime,version,timestamp;
|
|
uint8_t *rawtxbytes;
|
|
struct iguana_RTunspent **unspents;
|
|
struct iguana_RTspend *spends[];
|
|
};
|
|
|
|
struct hashstr_item { UT_hash_handle hh; char address[40]; };
|
|
|
|
struct jumblr_pending { bits256 splittxid,txid; int32_t vout,ind; };
|
|
|
|
struct DEXcoin_info
|
|
{
|
|
bits256 deposit_privkey,jumblr_privkey;
|
|
struct iguana_info *coin;
|
|
double btcprice,BTC2KMD,kmdprice,USD_average,DEXpending,maxbid,minask,avail,jumblravail;
|
|
uint32_t lasttime,counter; int32_t numpending;
|
|
char CMCname[32],symbol[16],depositaddr[64],KMDdepositaddr[64],KMDjumblraddr[64],jumblraddr[64];
|
|
struct jumblr_pending *pending;
|
|
};
|
|
|
|
struct iguana_info
|
|
{
|
|
UT_hash_handle hh;
|
|
char CMCname[64],name[64],symbol[64],protocol,statusstr[512],scriptsfname[2][512];
|
|
struct iguana_peers *peers; struct iguana_peer internaladdr;
|
|
//basilisk_func basilisk_rawtx,basilisk_balances,basilisk_value;
|
|
//basilisk_metricfunc basilisk_rawtxmetric,basilisk_balancesmetric,basilisk_valuemetric;
|
|
#if defined(_M_X64)
|
|
/*
|
|
* because we have no choice but to pass the value as parameters
|
|
* we need 64bit to hold 64bit memory address, thus changing
|
|
* to uint64_t instead of long in win x64
|
|
* @author - fadedreamz@gmail.com
|
|
*/
|
|
uint64_t vinptrs[IGUANA_MAXPEERS + 1][2], voutptrs[IGUANA_MAXPEERS + 1][2];
|
|
#else
|
|
long vinptrs[IGUANA_MAXPEERS+1][2],voutptrs[IGUANA_MAXPEERS+1][2];
|
|
#endif
|
|
uint32_t fastfind; FILE *fastfps[0x100]; uint8_t *fast[0x100]; int32_t *fasttables[0x100]; long fastsizes[0x100];
|
|
uint64_t instance_nonce,myservices,totalsize,totalrecv,totalpackets,sleeptime;
|
|
int64_t mining,totalfees,TMPallocated,MAXRECVCACHE,MAXMEM,PREFETCHLAG,estsize,activebundles;
|
|
int32_t MAXPEERS,MAXPENDINGREQUESTS,MAXBUNDLES,MAXSTUCKTIME,active,closestbundle,numemitted,lastsweep,numemit,startutc,newramchain,numcached,cachefreed,helperdepth,startPEND,endPEND,enableCACHE,FULLNODE,VALIDATENODE,origbalanceswritten,balanceswritten,lastRTheight,RTdatabad;
|
|
bits256 balancehash,allbundles;
|
|
uint32_t lastsync,parsetime,numiAddrs,lastpossible,bundlescount,savedblocks,backlog,spendvectorsaved,laststats,lastinv2,symbolcrc,spendvalidated; char VALIDATEDIR[512];
|
|
int32_t longestchain,badlongestchain,longestchain_strange,RTramchain_busy,emitbusy,stuckiters,virtualchain,RTheight,RTreset_needed;
|
|
struct tai starttime; double startmillis;
|
|
struct iguana_chain *chain;
|
|
struct iguana_iAddr *iAddrs;
|
|
void *ctx;
|
|
struct iguana_bitmap *screen;
|
|
struct OS_memspace TXMEM,MEM,MEMB[IGUANA_MAXBUNDLESIZE];
|
|
queue_t acceptQ,hdrsQ,blocksQ,priorityQ,possibleQ,cacheQ,recvQ,msgrequestQ,jsonQ,finishedQ;
|
|
double parsemillis,avetime; uint32_t Launched[8],Terminated[8];
|
|
portable_mutex_t peers_mutex,blocks_mutex,special_mutex,RTmutex,allcoins_mutex;
|
|
char changeaddr[64];
|
|
struct iguana_bundle *bundles[IGUANA_MAXBUNDLES],*current,*lastpending;
|
|
struct OS_memspace RTrawmem,RTmem,RThashmem; // struct iguana_ramchain RTramchain;
|
|
bits256 RThash1;
|
|
int32_t numremain,numpendings,zcount,recvcount,bcount,pcount,lastbundle,numsaved,pendbalances,numverified,blockdepth,matchedfiles;
|
|
uint32_t recvtime,hdrstime,backstoptime,lastbundletime,numreqsent,numbundlesQ,lastbundleitime,lastdisp,RTgenesis,firstRTgenesis,RTstarti,idletime,stucktime,stuckmonitor,maxstuck,lastreqtime,RThdrstime,nextchecked,lastcheckpoint,sigserrs,sigsvalidated,coinid;
|
|
double bandwidth,maxbandwidth,backstopmillis; bits256 backstophash2; int64_t spaceused;
|
|
int32_t disableUTXO,initialheight,mapflags,minconfirms,numrecv,bindsock,isRT,backstop,blocksrecv,merging,firstRTheight,maxRTheight,polltimeout,numreqtxids,allhashes,balanceflush,basilisk_busy,almostRT,busy_processing; bits256 reqtxids[64];
|
|
void *launched,*started,*rpcloop;
|
|
uint64_t bloomsearches,bloomhits,bloomfalse,collisions,txfee_perkb,txfee;
|
|
uint8_t *blockspace; int32_t blockspacesize; struct OS_memspace blockMEM,RTHASHMEM;
|
|
bits256 APIblockhash,APItxid; char *APIblockstr;
|
|
struct iguana_hhutxo *utxotable;
|
|
#ifdef DEPRECATED_HHUTXO
|
|
struct iguana_hhaccount *accountstable;
|
|
#endif
|
|
char lastdispstr[2048],getinfostr[64];
|
|
double txidfind_totalmillis,txidfind_num,spendtxid_totalmillis,spendtxid_num;
|
|
struct iguana_monitorinfo monitoring[256];
|
|
int32_t notarychain,didaddresses;
|
|
struct datachain_info dPoW;
|
|
struct iguana_zblock newblock; char *newblockstr;
|
|
int32_t relay_RTheights[BASILISK_MAXRELAYS];
|
|
struct iguana_blocks blocks; void *mempool; void *mempools[BASILISK_MAXRELAYS];
|
|
|
|
struct iguana_utxoaddr *utxoaddrs,*RTprev; uint32_t utxodatasize,utxoaddrind;
|
|
uint64_t histbalance,RTcredits,RTdebits;
|
|
void *utxoaddrfileptr; long utxoaddrfilesize;
|
|
uint32_t utxoaddrlastcount,*utxoaddroffsets,lastunspentsupdate; uint8_t *utxoaddrtable; bits256 utxoaddrhash;
|
|
FILE *utxofp;
|
|
bits256 markedunspents[1024];
|
|
uint64_t estimatedfee;
|
|
char seedipaddr[64];
|
|
uint32_t lastbesthashtime; bits256 lastbesthash; int32_t lastbestheight;
|
|
struct DEXcoin_info DEXinfo;
|
|
struct iguana_block *RTblocks[65536]; uint8_t *RTrawdata[65536]; int32_t RTrecvlens[65536],RTnumtx[65536];
|
|
struct iguana_RTtxid *RTdataset; struct iguana_RTaddr *RTaddrs;
|
|
struct hashstr_item *alladdresses;
|
|
struct kmd_transactionhh *kmd_transactions; struct kmd_addresshh *kmd_addresses; portable_mutex_t kmdmutex; FILE *kmd_txidfp,*kmd_spendfp; int32_t kmd_didinit,kmd_height,DEXEXPLORER; uint32_t kmd_lasttime;
|
|
};
|
|
|
|
struct vin_signer { bits256 privkey; char coinaddr[64]; uint8_t siglen,sig[80],rmd160[20],pubkey[66]; };
|
|
|
|
struct vin_info
|
|
{
|
|
struct iguana_msgvin vin; uint64_t amount; cJSON *extras; bits256 sigtxid;
|
|
int32_t M,N,validmask,spendlen,type,p2shlen,numpubkeys,numsigs,height,hashtype,userdatalen,suppress_pubkeys,ignore_cltverr;
|
|
uint32_t sequence,unspentind; struct vin_signer signers[16]; char coinaddr[65];
|
|
uint8_t rmd160[20],spendscript[IGUANA_MAXSCRIPTSIZE],p2shscript[IGUANA_MAXSCRIPTSIZE],userdata[IGUANA_MAXSCRIPTSIZE];
|
|
};
|
|
|
|
struct bitcoin_unspent
|
|
{
|
|
bits256 txid,privkeys[16]; uint64_t value; int32_t vout,spendlen,p2shlen,numpubkeys; uint32_t sequence;
|
|
uint8_t addrtype,rmd160[20],pubkeys[16][65],spendscript[IGUANA_MAXSCRIPTSIZE],p2shscript[IGUANA_MAXSCRIPTSIZE];
|
|
};
|
|
|
|
struct bitcoin_spend
|
|
{
|
|
char changeaddr[64]; uint8_t change160[20];
|
|
int32_t numinputs;
|
|
int64_t txfee,input_satoshis,satoshis,change;
|
|
struct bitcoin_unspent inputs[];
|
|
};
|
|
|
|
struct iguana_outpoint { void *ptr; bits256 txid; int64_t value; uint32_t unspentind; int16_t hdrsi,vout,spendlen:15,isptr:1; uint8_t spendscript[512]; };
|
|
|
|
struct exchange_quote { uint64_t satoshis,orderid,offerNXT,exchangebits; double price,volume; uint32_t timestamp,val; };
|
|
|
|
struct _gfshare_ctx
|
|
{
|
|
uint32_t sharecount,threshold,size,buffersize,allocsize;
|
|
uint8_t sharenrs[255],buffer[];
|
|
};
|
|
|
|
struct basilisk_p2pitem
|
|
{
|
|
struct queueitem DL;
|
|
struct iguana_info *coin; struct iguana_peer *addr;
|
|
uint32_t ipbits,datalen; char type[4];
|
|
uint8_t data[];
|
|
};
|
|
|
|
struct basilisk_request
|
|
{
|
|
uint32_t requestid,timestamp,quoteid,quotetime; // 0 to 15
|
|
uint64_t srcamount,minamount; // 16 to 31
|
|
bits256 srchash; // 32 to 63
|
|
bits256 desthash;
|
|
char src[8],dest[8];
|
|
//char volatile_start,message[43];
|
|
uint64_t destamount;
|
|
int32_t optionhours,profitmargin;//,DEXselector,extraspace;
|
|
} PACKEDSTRUCT;
|
|
|
|
struct basilisk_relaystatus
|
|
{
|
|
uint8_t pingdelay;
|
|
};
|
|
|
|
struct basilisk_relay
|
|
{
|
|
bits256 pubkey; int32_t relayid,oldrelayid; uint32_t ipbits,lastping; uint8_t pubkey33[33];
|
|
struct basilisk_request *requests; int32_t maxrequests,numrequests;
|
|
struct basilisk_relaystatus direct,reported[BASILISK_MAXRELAYS];
|
|
};
|
|
|
|
#endif
|
|
|
|
|