]> Git Repo - VerusCoin.git/blob - src/cc/CCcustom.cpp
Latest Zcash updates
[VerusCoin.git] / src / cc / CCcustom.cpp
1 /******************************************************************************
2  * Copyright © 2014-2018 The SuperNET Developers.                             *
3  *                                                                            *
4  * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at                  *
5  * the top-level directory of this distribution for the individual copyright  *
6  * holder information and the developer policies on copyright and licensing.  *
7  *                                                                            *
8  * Unless otherwise agreed in a custom licensing agreement, no part of the    *
9  * SuperNET software, including this file may be copied, modified, propagated *
10  * or distributed except according to the terms contained in the LICENSE file *
11  *                                                                            *
12  * Removal or modification of this copyright notice is prohibited.            *
13  *                                                                            *
14  ******************************************************************************/
15
16 #include "CCinclude.h"
17 #include "CCassets.h"
18 #include "CCfaucet.h"
19 #include "CCrewards.h"
20 #include "CCdice.h"
21 #include "CCauction.h"
22 #include "CClotto.h"
23 #include "CCfsm.h"
24 #include "CCMofN.h"
25 #include "CCchannels.h"
26 #include "CCOracles.h"
27 #include "CCPrices.h"
28 #include "CCPegs.h"
29 #include "CCTriggers.h"
30 #include "CCPayments.h"
31 #include "CCGateways.h"
32
33 /*
34  CCcustom has most of the functions that need to be extended to create a new CC contract.
35  
36  A CC scriptPubKey can only be spent if it is properly signed and validated. By constraining the vins and vouts, it is possible to implement a variety of functionality. CC vouts have an otherwise non-standard form, but it is properly supported by the enhanced bitcoin protocol code as a "cryptoconditions" output and the same pubkey will create a different address.
37  
38  This allows creation of a special address(es) for each contract type, which has the privkey public. That allows anybody to properly sign and spend it, but with the constraints on what is allowed in the validation code, the contract functionality can be implemented.
39  
40  what needs to be done to add a new contract:
41  1. add EVAL_CODE to eval.h
42  2. initialize the variables in the CCinit function below
43  3. write a Validate function to reject any unsanctioned usage of vin/vout
44  4. make helper functions to create rawtx for RPC functions
45  5. add rpc calls to rpcserver.cpp and rpcserver.h and in one of the rpc.cpp files
46  6. add the new .cpp files to src/Makefile.am
47  
48  IMPORTANT: make sure that all CC inputs and CC outputs are properly accounted for and reconcile to the satoshi. The built in utxo management will enforce overall vin/vout constraints but it wont know anything about the CC constraints. That is what your Validate function needs to do.
49  
50  Generally speaking, there will be normal coins that change into CC outputs, CC outputs that go back to being normal coins, CC outputs that are spent to new CC outputs.
51  
52  Make sure both the CC coins and normal coins are preserved and follow the rules that make sense. It is a good idea to define specific roles for specific vins and vouts to reduce the complexity of validation.
53  */
54
55 // to create a new CCaddr, add to rpcwallet the CCaddress and start with -pubkey= with the pubkey of the new address, with its wif already imported. set normaladdr and CChexstr. run CCaddress and it will print the privkey along with autocorrect the CCaddress. which should then update the CCaddr here
56
57 // Assets, aka Tokens
58 #define FUNCNAME IsAssetsInput
59 #define EVALCODE EVAL_ASSETS
60 const char *AssetsCCaddr = "RGKRjeTBw4LYFotSDLT6RWzMHbhXri6BG6";
61 const char *AssetsNormaladdr = "RFYE2yL3KknWdHK6uNhvWacYsCUtwzjY3u";
62 char AssetsCChexstr[67] = { "02adf84e0e075cf90868bd4e3d34a03420e034719649c41f371fc70d8e33aa2702" };
63 uint8_t AssetsCCpriv[32] = { 0x9b, 0x17, 0x66, 0xe5, 0x82, 0x66, 0xac, 0xb6, 0xba, 0x43, 0x83, 0x74, 0xf7, 0x63, 0x11, 0x3b, 0xf0, 0xf3, 0x50, 0x6f, 0xd9, 0x6b, 0x67, 0x85, 0xf9, 0x7a, 0xf0, 0x54, 0x4d, 0xb1, 0x30, 0x77 };
64
65 #include "CCcustom.inc"
66 #undef FUNCNAME
67 #undef EVALCODE
68
69 // Faucet
70 #define FUNCNAME IsFaucetInput
71 #define EVALCODE EVAL_FAUCET
72 const char *FaucetCCaddr = "R9zHrofhRbub7ER77B7NrVch3A63R39GuC";
73 const char *FaucetNormaladdr = "RKQV4oYs4rvxAWx1J43VnT73rSTVtUeckk";
74 char FaucetCChexstr[67] = { "03682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe12" };
75 uint8_t FaucetCCpriv[32] = { 0xd4, 0x4f, 0xf2, 0x31, 0x71, 0x7d, 0x28, 0x02, 0x4b, 0xc7, 0xdd, 0x71, 0xa0, 0x39, 0xc4, 0xbe, 0x1a, 0xfe, 0xeb, 0xc2, 0x46, 0xda, 0x76, 0xf8, 0x07, 0x53, 0x3d, 0x96, 0xb4, 0xca, 0xa0, 0xe9 };
76
77 #include "CCcustom.inc"
78 #undef FUNCNAME
79 #undef EVALCODE
80
81 // Rewards
82 #define FUNCNAME IsRewardsInput
83 #define EVALCODE EVAL_REWARDS
84 const char *RewardsCCaddr = "RTsRBYL1HSvMoE3qtBJkyiswdVaWkm8YTK";
85 const char *RewardsNormaladdr = "RMgye9jeczNjQx9Uzq8no8pTLiCSwuHwkz";
86 char RewardsCChexstr[67] = { "03da60379d924c2c30ac290d2a86c2ead128cb7bd571f69211cb95356e2dcc5eb9" };
87 uint8_t RewardsCCpriv[32] = { 0x82, 0xf5, 0xd2, 0xe7, 0xd6, 0x99, 0x33, 0x77, 0xfb, 0x80, 0x00, 0x97, 0x23, 0x3d, 0x1e, 0x6f, 0x61, 0xa9, 0xb5, 0x2e, 0x5e, 0xb4, 0x96, 0x6f, 0xbc, 0xed, 0x6b, 0xe2, 0xbb, 0x7b, 0x4b, 0xb3 };
88 #include "CCcustom.inc"
89 #undef FUNCNAME
90 #undef EVALCODE
91
92 // Dice
93 #define FUNCNAME IsDiceInput
94 #define EVALCODE EVAL_DICE
95 const char *DiceCCaddr = "REabWB7KjFN5C3LFMZ5odExHPenYzHLtVw";
96 const char *DiceNormaladdr = "RLEe8f7Eg3TDuXii9BmNiiiaVGraHUt25c";
97 char DiceCChexstr[67] = { "039d966927cfdadab3ee6c56da63c21f17ea753dde4b3dfd41487103e24b27e94e" };
98 uint8_t DiceCCpriv[32] = { 0x0e, 0xe8, 0xf5, 0xb4, 0x3d, 0x25, 0xcc, 0x35, 0xd1, 0xf1, 0x2f, 0x04, 0x5f, 0x01, 0x26, 0xb8, 0xd1, 0xac, 0x3a, 0x5a, 0xea, 0xe0, 0x25, 0xa2, 0x8f, 0x2a, 0x8e, 0x0e, 0xf9, 0x34, 0xfa, 0x77 };
99 #include "CCcustom.inc"
100 #undef FUNCNAME
101 #undef EVALCODE
102
103 // Lotto
104 #define FUNCNAME IsLottoInput
105 #define EVALCODE EVAL_LOTTO
106 const char *LottoCCaddr = "RNXZxgyWSAE6XS3qGnTaf5dVNCxnYzhPrg";
107 const char *LottoNormaladdr = "RLW6hhRqBZZMBndnyPv29Yg3krh6iBYCyg";
108 char LottoCChexstr[67] = { "03f72d2c4db440df1e706502b09ca5fec73ffe954ea1883e4049e98da68690d98f" };
109 uint8_t LottoCCpriv[32] = { 0xb4, 0xac, 0xc2, 0xd9, 0x67, 0x34, 0xd7, 0x58, 0x80, 0x4e, 0x25, 0x55, 0xc0, 0x50, 0x66, 0x84, 0xbb, 0xa2, 0xe7, 0xc0, 0x39, 0x17, 0xb4, 0xc5, 0x07, 0xb7, 0x3f, 0xca, 0x07, 0xb0, 0x9a, 0xeb };
110 #include "CCcustom.inc"
111 #undef FUNCNAME
112 #undef EVALCODE
113
114 // Finite State Machine
115 #define FUNCNAME IsFSMInput
116 #define EVALCODE EVAL_FSM
117 const char *FSMCCaddr = "RUKTbLBeKgHkm3Ss4hKZP3ikuLW1xx7B2x";
118 const char *FSMNormaladdr = "RWSHRbxnJYLvDjpcQ2i8MekgP6h2ctTKaj";
119 char FSMCChexstr[67] = { "039b52d294b413b07f3643c1a28c5467901a76562d8b39a785910ae0a0f3043810" };
120 uint8_t FSMCCpriv[32] = { 0x11, 0xe1, 0xea, 0x3e, 0xdb, 0x36, 0xf0, 0xa8, 0xc6, 0x34, 0xe1, 0x21, 0xb8, 0x02, 0xb9, 0x4b, 0x12, 0x37, 0x8f, 0xa0, 0x86, 0x23, 0x50, 0xb2, 0x5f, 0xe4, 0xe7, 0x36, 0x0f, 0xda, 0xae, 0xfc };
121 #include "CCcustom.inc"
122 #undef FUNCNAME
123 #undef EVALCODE
124
125 // Auction
126 #define FUNCNAME IsAuctionInput
127 #define EVALCODE EVAL_AUCTION
128 const char *AuctionCCaddr = "RL4YPX7JYG3FnvoPqWF2pn3nQknH5NWEwx";
129 const char *AuctionNormaladdr = "RFtVDNmdTZBTNZdmFRbfBgJ6LitgTghikL";
130 char AuctionCChexstr[67] = { "037eefe050c14cb60ae65d5b2f69eaa1c9006826d729bc0957bdc3024e3ca1dbe6" };
131 uint8_t AuctionCCpriv[32] = { 0x8c, 0x1b, 0xb7, 0x8c, 0x02, 0xa3, 0x9d, 0x21, 0x28, 0x59, 0xf5, 0xea, 0xda, 0xec, 0x0d, 0x11, 0xcd, 0x38, 0x47, 0xac, 0x0b, 0x6f, 0x19, 0xc0, 0x24, 0x36, 0xbf, 0x1c, 0x0a, 0x06, 0x31, 0xfb };
132 #include "CCcustom.inc"
133 #undef FUNCNAME
134 #undef EVALCODE
135
136 // MofN
137 #define FUNCNAME IsMofNInput
138 #define EVALCODE EVAL_MOFN
139 const char *MofNCCaddr = "RDVHcSekmXgeYBqRupNTmqo3Rn8QRXNduy";
140 const char *MofNNormaladdr = "RTPwUjKYECcGn6Y4KYChLhgaht1RSU4jwf";
141 char MofNCChexstr[67] = { "03c91bef3d7cc59c3a89286833a3446b29e52a5e773f738a1ad2b09785e5f4179e" };
142 uint8_t MofNCCpriv[32] = { 0x9d, 0xa1, 0xf8, 0xf7, 0xba, 0x0a, 0x91, 0x36, 0x89, 0x9a, 0x86, 0x30, 0x63, 0x20, 0xd7, 0xdf, 0xaa, 0x35, 0xe3, 0x99, 0x32, 0x2b, 0x63, 0xc0, 0x66, 0x9c, 0x93, 0xc4, 0x5e, 0x9d, 0xb9, 0xce };
143 #include "CCcustom.inc"
144 #undef FUNCNAME
145 #undef EVALCODE
146
147 // Channels
148 #define FUNCNAME IsChannelsInput
149 #define EVALCODE EVAL_CHANNELS
150 const char *ChannelsCCaddr = "RQy3rwX8sP9oDm3c39vGKA6H315cgtPLfr";
151 const char *ChannelsNormaladdr = "RQUuT8zmkvDfXqECH4m3VD3SsHZAfnoh1v";
152 char ChannelsCChexstr[67] = { "035debdb19b1c98c615259339500511d6216a3ffbeb28ff5655a7ef5790a12ab0b" };
153 uint8_t ChannelsCCpriv[32] = { 0xec, 0x91, 0x36, 0x15, 0x2d, 0xd4, 0x48, 0x73, 0x22, 0x36, 0x4f, 0x6a, 0x34, 0x5c, 0x61, 0x0f, 0x01, 0xb4, 0x79, 0xe8, 0x1c, 0x2f, 0xa1, 0x1d, 0x4a, 0x0a, 0x21, 0x16, 0xea, 0x82, 0x84, 0x60 };
154 #include "CCcustom.inc"
155 #undef FUNCNAME
156 #undef EVALCODE
157
158 // Oracles
159 #define FUNCNAME IsOraclesInput
160 #define EVALCODE EVAL_ORACLES
161 const char *OraclesCCaddr = "REt2C4ZMnX8YYX1DRpffNA4hECZTFm39e3";
162 const char *OraclesNormaladdr = "RHkFKzn1csxA3fWzAsxsLWohoCgBbirXb5";
163 char OraclesCChexstr[67] = { "038c1d42db6a45a57eccb8981b078fb7857b9b496293fe299d2b8d120ac5b5691a" };
164 uint8_t OraclesCCpriv[32] = { 0xf7, 0x4b, 0x5b, 0xa2, 0x7a, 0x5e, 0x9c, 0xda, 0x89, 0xb1, 0xcb, 0xb9, 0xe6, 0x9c, 0x2c, 0x70, 0x85, 0x37, 0xdd, 0x00, 0x7a, 0x67, 0xff, 0x7c, 0x62, 0x1b, 0xe2, 0xfb, 0x04, 0x8f, 0x85, 0xbf };
165 #include "CCcustom.inc"
166 #undef FUNCNAME
167 #undef EVALCODE
168
169 // Prices
170 #define FUNCNAME IsPricesInput
171 #define EVALCODE EVAL_PRICES
172 const char *PricesCCaddr = "RAL5Vh8NXmFqEKJRKrk1KjKaUckK7mM1iS";
173 const char *PricesNormaladdr = "RBunXCsMHk5NPd6q8SQfmpgre3x133rSwZ";
174 char PricesCChexstr[67] = { "039894cb054c0032e99e65e715b03799607aa91212a16648d391b6fa2cc52ed0cf" };
175 uint8_t PricesCCpriv[32] = { 0x0a, 0x3b, 0xe7, 0x5d, 0xce, 0x06, 0xed, 0xb7, 0xc0, 0xb1, 0xbe, 0xe8, 0x7b, 0x5a, 0xd4, 0x99, 0xb8, 0x8d, 0xde, 0xac, 0xb2, 0x7e, 0x7a, 0x52, 0x96, 0x15, 0xd2, 0xa0, 0xc6, 0xb9, 0x89, 0x61 };
176 #include "CCcustom.inc"
177 #undef FUNCNAME
178 #undef EVALCODE
179
180 // Pegs
181 #define FUNCNAME IsPegsInput
182 #define EVALCODE EVAL_PEGS
183 const char *PegsCCaddr = "RHnkVb7vHuHnjEjhkCF1bS6xxLLNZPv5fd";
184 const char *PegsNormaladdr = "RMcCZtX6dHf1fz3gpLQhUEMQ8cVZ6Rzaro";
185 char PegsCChexstr[67] = { "03c75c1de29a35e41606363b430c08be1c2dd93cf7a468229a082cc79c7b77eece" };
186 uint8_t PegsCCpriv[32] = { 0x52, 0x56, 0x4c, 0x78, 0x87, 0xf7, 0xa2, 0x39, 0xb0, 0x90, 0xb7, 0xb8, 0x62, 0x80, 0x0f, 0x83, 0x18, 0x9d, 0xf4, 0xf4, 0xbd, 0x28, 0x09, 0xa9, 0x9b, 0x85, 0x54, 0x16, 0x0f, 0x3f, 0xfb, 0x65 };
187 #include "CCcustom.inc"
188 #undef FUNCNAME
189 #undef EVALCODE
190
191 // Triggers
192 #define FUNCNAME IsTriggersInput
193 #define EVALCODE EVAL_TRIGGERS
194 const char *TriggersCCaddr = "RGLSRDnUqTB43bYtRtNVgmwSSd1sun2te8";
195 const char *TriggersNormaladdr = "RMN25Tn8NNzcyQDiQNuMp8UmwLMFd9thYc";
196 char TriggersCChexstr[67] = { "03afc5be570d0ff419425cfcc580cc762ab82baad88c148f5b028d7db7bfeee61d" };
197 uint8_t TriggersCCpriv[32] = { 0x7c, 0x0b, 0x54, 0x9b, 0x65, 0xd4, 0x89, 0x57, 0xdf, 0x05, 0xfe, 0xa2, 0x62, 0x41, 0xa9, 0x09, 0x0f, 0x2a, 0x6b, 0x11, 0x2c, 0xbe, 0xbd, 0x06, 0x31, 0x8d, 0xc0, 0xb9, 0x96, 0x76, 0x3f, 0x24 };
198 #include "CCcustom.inc"
199 #undef FUNCNAME
200 #undef EVALCODE
201
202 // Payments
203 #define FUNCNAME IsPaymentsInput
204 #define EVALCODE EVAL_PAYMENTS
205 const char *PaymentsCCaddr = "REpyKi7avsVduqZ3eimncK4uKqSArLTGGK";
206 const char *PaymentsNormaladdr = "RHRX8RTMAh2STWe9DHqsvJbzS7ty6aZy3d";
207 char PaymentsCChexstr[67] = { "0358f1764f82c63abc7c7455555fd1d3184905e30e819e97667e247e5792b46856" };
208 uint8_t PaymentsCCpriv[32] = { 0x03, 0xc9, 0x73, 0xc2, 0xb8, 0x30, 0x3d, 0xbd, 0xc8, 0xd9, 0xbf, 0x02, 0x49, 0xd9, 0x65, 0x61, 0x45, 0xed, 0x9e, 0x93, 0x51, 0xab, 0x8b, 0x2e, 0xe7, 0xc7, 0x40, 0xf1, 0xc4, 0xd2, 0xc0, 0x5b };
209 #include "CCcustom.inc"
210 #undef FUNCNAME
211 #undef EVALCODE
212
213 // Gateways
214 #define FUNCNAME IsGatewaysInput
215 #define EVALCODE EVAL_GATEWAYS
216 const char *GatewaysCCaddr = "RKWpoK6vTRtq5b9qrRBodLkCzeURHeEk33";
217 const char *GatewaysNormaladdr = "RGJKV97ZN1wBfunuMt1tebiiHENNEq73Yh";
218 char GatewaysCChexstr[67] = { "03ea9c062b9652d8eff34879b504eda0717895d27597aaeb60347d65eed96ccb40" };
219 uint8_t GatewaysCCpriv[32] = { 0xf7, 0x4b, 0x5b, 0xa2, 0x7a, 0x5e, 0x9c, 0xda, 0x89, 0xb1, 0xcb, 0xb9, 0xe6, 0x9c, 0x2c, 0x70, 0x85, 0x37, 0xdd, 0x00, 0x7a, 0x67, 0xff, 0x7c, 0x62, 0x1b, 0xe2, 0xfb, 0x04, 0x8f, 0x85, 0xbf };
220 #include "CCcustom.inc"
221 #undef FUNCNAME
222 #undef EVALCODE
223
224 struct CCcontract_info *CCinit(struct CCcontract_info *cp,uint8_t evalcode)
225 {
226     cp->evalcode = evalcode;
227     switch ( evalcode )
228     {
229         case EVAL_ASSETS:
230             strcpy(cp->unspendableCCaddr,AssetsCCaddr);
231             strcpy(cp->normaladdr,AssetsNormaladdr);
232             strcpy(cp->CChexstr,AssetsCChexstr);
233             memcpy(cp->CCpriv,AssetsCCpriv,32);
234             cp->validate = AssetsValidate;
235             cp->ismyvin = IsAssetsInput;
236             break;
237         case EVAL_FAUCET:
238             strcpy(cp->unspendableCCaddr,FaucetCCaddr);
239             strcpy(cp->normaladdr,FaucetNormaladdr);
240             strcpy(cp->CChexstr,FaucetCChexstr);
241             memcpy(cp->CCpriv,FaucetCCpriv,32);
242             cp->validate = FaucetValidate;
243             cp->ismyvin = IsFaucetInput;
244             break;
245         case EVAL_REWARDS:
246             strcpy(cp->unspendableCCaddr,RewardsCCaddr);
247             strcpy(cp->normaladdr,RewardsNormaladdr);
248             strcpy(cp->CChexstr,RewardsCChexstr);
249             memcpy(cp->CCpriv,RewardsCCpriv,32);
250             cp->validate = RewardsValidate;
251             cp->ismyvin = IsRewardsInput;
252             break;
253         case EVAL_DICE:
254             strcpy(cp->unspendableCCaddr,DiceCCaddr);
255             strcpy(cp->normaladdr,DiceNormaladdr);
256             strcpy(cp->CChexstr,DiceCChexstr);
257             memcpy(cp->CCpriv,DiceCCpriv,32);
258             cp->validate = DiceValidate;
259             cp->ismyvin = IsDiceInput;
260             break;
261         case EVAL_LOTTO:
262             strcpy(cp->unspendableCCaddr,LottoCCaddr);
263             strcpy(cp->normaladdr,LottoNormaladdr);
264             strcpy(cp->CChexstr,LottoCChexstr);
265             memcpy(cp->CCpriv,LottoCCpriv,32);
266             cp->validate = LottoValidate;
267             cp->ismyvin = IsLottoInput;
268             break;
269         case EVAL_FSM:
270             strcpy(cp->unspendableCCaddr,FSMCCaddr);
271             strcpy(cp->normaladdr,FSMNormaladdr);
272             strcpy(cp->CChexstr,FSMCChexstr);
273             memcpy(cp->CCpriv,FSMCCpriv,32);
274             cp->validate = FSMValidate;
275             cp->ismyvin = IsFSMInput;
276             break;
277         case EVAL_AUCTION:
278             strcpy(cp->unspendableCCaddr,AuctionCCaddr);
279             strcpy(cp->normaladdr,AuctionNormaladdr);
280             strcpy(cp->CChexstr,AuctionCChexstr);
281             memcpy(cp->CCpriv,AuctionCCpriv,32);
282             cp->validate = AuctionValidate;
283             cp->ismyvin = IsAuctionInput;
284             break;
285         case EVAL_MOFN:
286             strcpy(cp->unspendableCCaddr,MofNCCaddr);
287             strcpy(cp->normaladdr,MofNNormaladdr);
288             strcpy(cp->CChexstr,MofNCChexstr);
289             memcpy(cp->CCpriv,MofNCCpriv,32);
290             cp->validate = MofNValidate;
291             cp->ismyvin = IsMofNInput;
292             break;
293         case EVAL_CHANNELS:
294             strcpy(cp->unspendableCCaddr,ChannelsCCaddr);
295             strcpy(cp->normaladdr,ChannelsNormaladdr);
296             strcpy(cp->CChexstr,ChannelsCChexstr);
297             memcpy(cp->CCpriv,ChannelsCCpriv,32);
298             cp->validate = ChannelsValidate;
299             cp->ismyvin = IsChannelsInput;
300             break;
301         case EVAL_ORACLES:
302             strcpy(cp->unspendableCCaddr,OraclesCCaddr);
303             strcpy(cp->normaladdr,OraclesNormaladdr);
304             strcpy(cp->CChexstr,OraclesCChexstr);
305             memcpy(cp->CCpriv,OraclesCCpriv,32);
306             cp->validate = OraclesValidate;
307             cp->ismyvin = IsOraclesInput;
308             break;
309         case EVAL_PRICES:
310             strcpy(cp->unspendableCCaddr,PricesCCaddr);
311             strcpy(cp->normaladdr,PricesNormaladdr);
312             strcpy(cp->CChexstr,PricesCChexstr);
313             memcpy(cp->CCpriv,PricesCCpriv,32);
314             cp->validate = PricesValidate;
315             cp->ismyvin = IsPricesInput;
316             break;
317         case EVAL_PEGS:
318             strcpy(cp->unspendableCCaddr,PegsCCaddr);
319             strcpy(cp->normaladdr,PegsNormaladdr);
320             strcpy(cp->CChexstr,PegsCChexstr);
321             memcpy(cp->CCpriv,PegsCCpriv,32);
322             cp->validate = PegsValidate;
323             cp->ismyvin = IsPegsInput;
324             break;
325         case EVAL_TRIGGERS:
326             strcpy(cp->unspendableCCaddr,TriggersCCaddr);
327             strcpy(cp->normaladdr,TriggersNormaladdr);
328             strcpy(cp->CChexstr,TriggersCChexstr);
329             memcpy(cp->CCpriv,TriggersCCpriv,32);
330             cp->validate = TriggersValidate;
331             cp->ismyvin = IsTriggersInput;
332             break;
333         case EVAL_PAYMENTS:
334             strcpy(cp->unspendableCCaddr,PaymentsCCaddr);
335             strcpy(cp->normaladdr,PaymentsNormaladdr);
336             strcpy(cp->CChexstr,PaymentsCChexstr);
337             memcpy(cp->CCpriv,PaymentsCCpriv,32);
338             cp->validate = PaymentsValidate;
339             cp->ismyvin = IsPaymentsInput;
340             break;
341         case EVAL_GATEWAYS:
342             strcpy(cp->unspendableCCaddr,GatewaysCCaddr);
343             strcpy(cp->normaladdr,GatewaysNormaladdr);
344             strcpy(cp->CChexstr,GatewaysCChexstr);
345             memcpy(cp->CCpriv,GatewaysCCpriv,32);
346             cp->validate = GatewaysValidate;
347             cp->ismyvin = IsGatewaysInput;
348             break;
349     }
350     return(cp);
351 }
352
This page took 0.043327 seconds and 4 git commands to generate.