Supported Feathercoin client versions: Current production Version: 0.16.1.

Old Production Version: 0.16

Info: If you have problems to post, create one post in the ‘newbies’ category and try again. If you have further problems, find support under Guides

[Dev] Documenting Feathercoin Specific Software settings - Part 21


  • Moderators

    Feathercoin specific changes made to - FTC 0.11.2.

    Smart Contract Status Review

    Smart contract step one : : commit

    https://github.com/wrapperband/Feathercoin/commit/0e457b6e89c2eef64deb9028d9f2ae9baf53e7d8

    src/qt/locale/bitcoin_zh_CN.ts

     +    <message>
     +        <source>Input your receiving addresses!</source>
     +        <translation>输入你的地址!</translation>
     +    </message>
    

    Translation file updated

    src/qt/sendcoinsdialog.cpp

     +	 int nHashType = SIGHASH_ALL;
     +	 if (!fSend)
     +	 {
     +	 LogPrintf("sendCoins,SIGHASH_ALL=%i, SIGHASH_ANYONECANPAY=%i, SIGHASH_ALL|SIGHASH_ANYONECANPAY=%i\n",int(SIGHASH_ALL), int(SIGHASH_ANYONECANPAY), int(SIGHASH_ALL|SIGHASH_ANYONECANPAY));
     +	 nHashType = SIGHASH_ALL|SIGHASH_ANYONECANPAY;  //按位或运算符(|)
     +	 }
     +	 LogPrintf("sendCoins,nHashType=%i\n",nHashType);
     +		
    

    Note : chinese comments later removed

     +   	//是否能正常准备交易??
    

    comment

     - prepareStatus = model->prepareTransaction(currentTransaction, CoinControlDialog::coinControl);
    
     + prepareStatus = model->prepareTransaction(currentTransaction, CoinControlDialog::coinControl, nHashType);
    

    Code replaced

     +  LogPrintf("sendCoins,200\n");	
    

    Code added

     -        BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), currentTransaction.getTransactionFee()));
    
    
     +    if(nHashType != int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))
     +    {
     +    	processSendCoinsReturn(prepareStatus, BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), currentTransaction.getTransactionFee()));
     +    }
     +		LogPrintf("sendCoins,210\n");
    

    Code replaced

     -        fNewRecipientAllowed = true;
     -        return;
     -    }    
    
     +    		if(nHashType != int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))
     +    		{	
     +        	fNewRecipientAllowed = true;
     +        	return;
     +      	}
     +    }
         //此时交易已经完整、已经签名
         //此时交易已经完整、已经签名
     +    LogPrintf("sendCoins,300\n");
    

    Code Replaced

    src/qt/utilitydialog.cpp

    Large section of additional code from Line 773 to 839

     -		空白交易中vin的scriptSig是空,要将输入的txID中的输出vout中的地址(scriptPubKey的hex)作为参数,
     -		进行签名。此后才形成完整交易。 */
     + 空白交易中vin的scriptSig是空,要将输入的txID中的输出vout中的地址(scriptPubKey的hex)作为参数,进行签名。此后才形成完整交易。 */
    
     + /*  SIGHASH_ANYONECANPAY是附加的指示器,意味着签名仅覆盖自己的输入部分-不签名其他人的输入,这样其他人的输入可以留空。
     + 使用这些符号,我们能创建这样一个签名,即使在其他输入添加进入后,该签名依旧是有效的。
     + 但如果输出内容或其他的交易部分被改变了,该签名就无效了。 */
    	
    	
     + //向同一个地址输出相同的金额
     + //输入32.08,输出100
     + QString txCode1="0100000001045a7ee58f31e0be85ef14d53c3da28c0da54e43ddbc1a5d8a96629604912cca060000006a47304402202bc13618ec8a45144b16fd4f7e94c610c578cfac3459e1f4df6486f9990515e00220325d7410fa162aeea36a616fc3f6ed6a036591de51c2a4ef92f1e0d2313939f3812102e28e23791192c079c8e2d24ed554b739e8b19a2b72e68d42b50e66a7b71d57d7feffffff0100e40b54020000001976a91488b640990330b13cbe900cdf210f0b1bb9f151b288acb4ae1500";
     + //输入78,输出100
     + QString txCode2="01000000012f82dbddb55f01fde2d91603abc2625ee585a2258106d2f650da50abe8ed06c5010000006b483045022100c6c392ad65950b4b5e64eb4dd4894587e63d8c43fd864d9525f05b23ae76ecb9022011929fcb4b01213b8ab59963c772a9cb8a9e808b5f80b64c8d7c255ec274e4f78121030e34be97bc6afcab5255f3e13061a78b6b6e14b03fcc93e89defd718cfe34621feffffff0100e40b54020000001976a91488b640990330b13cbe900cdf210f0b1bb9f151b288acb4ae1500";
     + 
     + CTransaction tx1;
     + CTransaction tx2;
     + if (!DecodeHexTx(tx1, txCode1.toStdString()))
     + {
     +     QMessageBox::information(NULL, tr("TX Message"), tr("TX1 decode failed!"), QMessageBox::Yes , QMessageBox::Yes);
     +     return;
     + }
     + if (!DecodeHexTx(tx2, txCode2.toStdString()))
     + {
     +     QMessageBox::information(NULL, tr("TX Message"), tr("TX2 decode failed!"), QMessageBox::Yes , QMessageBox::Yes);
     +     return;
     + }
     + LogPrintf("on_BroadcastBtn_clicked,tx1.vin.size=%i\n", tx1.vin.size());
     + LogPrintf("on_BroadcastBtn_clicked,tx2.vin.size=%i\n", tx2.vin.size());
     + 
     + //增加其他人的输入
     + CMutableTransaction rawTx;
     + for (unsigned int i = 0; i < tx1.vin.size(); i++)
     + {
     + 		const CTxIn& txin = tx1.vin[i];				
     + 		//利用 CMutableTransaction
     + 		rawTx.vin.push_back(txin);
     + }
     + for (unsigned int i = 0; i < tx2.vin.size(); i++)
     + {
     + 		const CTxIn& txin = tx2.vin[i];				
     + 		//利用 CMutableTransaction
     + 		rawTx.vin.push_back(txin);
     + }
     + //唯一一个输出
     + for (unsigned int i = 0; i < tx1.vout.size(); i++)
     + {
     + 		const CTxOut& txvout = tx1.vout[i];				
     + 		//利用 CMutableTransaction
     + 		rawTx.vout.push_back(txvout);
     + }
     + LogPrintf("on_BroadcastBtn_clicked,rawTx.vin.size=%i\n", rawTx.vin.size());
     + LogPrintf("on_BroadcastBtn_clicked,rawTx.vout.size=%i\n", rawTx.vout.size());
     + 
     + rawTx.nVersion = tx1.nVersion;
     + rawTx.nLockTime = tx1.nLockTime;
     + 
     + //获取二进制码
     + std::string strHex = EncodeHexTx(rawTx);
     + LogPrintf("on_BroadcastBtn_clicked,rawTx.strHex=%s\n", strHex);
     + //0100000002045a7ee58f31e0be85ef14d53c3da28c0da54e43ddbc1a5d8a96629604912cca060000006a47304402202bc13618ec8a45144b16fd4f7e94c610c578cfac3459e1f4df6486f9990515e00220325d7410fa162aeea36a616fc3f6ed6a036591de51c2a4ef92f1e0d2313939f3812102e28e23791192c079c8e2d24ed554b739e8b19a2b72e68d42b50e66a7b71d57d7feffffff2f82dbddb55f01fde2d91603abc2625ee585a2258106d2f650da50abe8ed06c5010000006b483045022100c6c392ad65950b4b5e64eb4dd4894587e63d8c43fd864d9525f05b23ae76ecb9022011929fcb4b01213b8ab59963c772a9cb8a9e808b5f80b64c8d7c255ec274e4f78121030e34be97bc6afcab5255f3e13061a78b6b6e14b03fcc93e89defd718cfe34621feffffff0100e40b54020000001976a91488b640990330b13cbe900cdf210f0b1bb9f151b288acb4ae1500
     + //Generic error (code -25),feathercoin-cli sendrawtransaction
     + 
     + //广播这个交易
     + CTransaction tx(rawTx);
     + RelayTransaction(tx);
     + uint256 hashTx = tx.GetHash();
     + LogPrintf("on_BroadcastBtn_clicked,rawTx.TxID=%s\n", hashTx.ToString());
     + //472ba519367e3337f0f718396ffc8fa7c0118fa33f78ee7f5a2db85881ddbcc6,超出的部分将是手续费
     + 
     + QMessageBox::information(NULL, tr("Broadcast Message"), tr("Broadcast success!<br>TxID=%1").arg(QString::fromStdString(hashTx.ToString())), QMessageBox::Yes , QMessageBox::Yes);
    

    Additional code

     +		QString strDoAddress=ui->targetLine->text();
     +		if (strDoAddress.toStdString() == "")
     +		{
    +		    QMessageBox::information(NULL, tr("TX Message"), tr("Input your receiving addresses!"), QMessageBox::Yes , QMessageBox::Yes);
    +		    return;
    +		}
    +		
    +		//1.显示输出		
    

    Additional code

     -   LogPrintf("on_AddTransBtn_clicked,obj.size=%d\n", obj.size());
    
     +  LogPrintf("on_AddTransBtn_clicked,scriptTxOut,obj.size=%d\n", obj.size());
    

    Code replaced

     - LogPrintf("on_AddTransBtn_clicked,obj[4].name=%s\n", name); //addresses
    
    + LogPrintf("on_AddTransBtn_clicked,scriptTxOut,obj[4].name=%s\n", name); //addresses
    

    Code replaced

     + LogPrintf("on_AddTransBtn_clicked,scriptTxOut,addresses=%s\n", addresses);
    
     +	LogPrintf("on_AddTransBtn_clicked,scriptTxOut,pay to addresses=%s,value=%d\n", addresses, dCoin);
    
     + LogPrintf("on_AddTransBtn_clicked,scriptTxOut,nowCoins=%d,dCoin=%d,vout.size=%d\n",nowCoins, dCoin, tx.vout.size());
    

    Various log errors replaced

     + 		//2.还需要显示输入
     + 		double dTxInCoin = 0;
     + 		CScript scriptTxIn;
     + 		BOOST_FOREACH(const CTxIn& txin, tx.vin)
     + 		{
     + 				scriptTxIn = txin.scriptSig;
     +         if (tx.IsCoinBase()==false)  //不接受挖矿支付
     +         {
     +         		std::string txID = txin.prevout.hash.GetHex();
     +         		int64_t vout = (int64_t)txin.prevout.n;
     +         		LogPrintf("on_AddTransBtn_clicked,scriptTxIn,txID=%s\n", txID);
     +         		LogPrintf("on_AddTransBtn_clicked,scriptTxIn,vout=%d\n", vout);
     +         		
     +         		//获取输入的那个交易,并找出他的输出值
     +         		CTransaction tx2;
     +         		uint256 hashBlock;
     +         		uint256 hash = txin.prevout.hash;
     +         		if (!GetTransaction(hash, tx2, hashBlock, true))
     +         		{
     +         				LogPrintf("on_AddTransBtn_clicked,scriptTxIn,Error=No information available about transaction\n", vout);
     +         				QMessageBox::information(NULL, tr("TX Message"), tr("No information available about transaction"), QMessageBox::Yes , QMessageBox::Yes);
     + 		    				return;		    				
     + 						}//txID=c42956cfed4a0e70baab7321c888c4bafb2f442e2b4f1aac8ae4ab952b3e2f09
     + 						
     + 						for (unsigned int i = 0; i < tx2.vout.size(); i++ )
     + 						{
     + 								const CTxOut& txout = tx2.vout[i];
     + 								double value = (double)txout.nValue / (double)COIN;
     + 								int64_t n = (int64_t)i;
     + 							  LogPrintf("on_AddTransBtn_clicked,scriptTxIn,scriptTxOut,value=%d,n=%i\n", value, n);
     + 							  
     + 							  //未花费的txid哪个输出是我可以花费的,见tx的txin.prevout.n = vin.vout
     + 							  if (i == vout)
     + 							  {
     + 							  	dTxInCoin = value;
     + 							  	getCoins + = dTxInCoin;
     + 							  }
     + 						}
     +       	}
     + 		}
     + 				  	
     + 	
    

    Section of additional code

     -		ui->progressBar->setValue(nowCoins);
    
     +		//ui->progressBar->setValue(nowCoins);
     +		ui->progressBar->setValue(getCoins);
     +		//Total Coins
    

    Replacement code

     -		QString amount = tr("%1 FTC").arg(dCoin);
    
     +		//This Coins,这个应该可以显示多个列?
     +		QString amount = tr("In %1 FTC,Out %2 FTC,%3").arg(dTxInCoin).arg(dCoin).arg(txCode);
    

    Replaced code

    src/qt/utilitydialog.h

     +    double getCoins;

  • Moderators

    Feathercoin specific changes made to - FTC 0.11.2.

    Smart Contract Status Review

    Smart contract step one : : commit

    https://github.com/wrapperband/Feathercoin/commit/0e457b6e89c2eef64deb9028d9f2ae9baf53e7d8

    src/qt/walletmodel.cpp

     -WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl)
    
    
     +WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl, int nHashType)
    

    Code replaced

     -    if(total > nBalance)
    
     +		//合约交易不验证输出,nHashType = SIGHASH_ALL|SIGHASH_ANYONECANPAY
    +    if((total > nBalance) && (nHashType != int(SIGHASH_ALL|SIGHASH_ANYONECANPAY)))
     +    		LogPrintf("prepareTransaction,total=%d,nBalance=%d,nHashType=%i\n",total, nBalance, nHashType);
    

    Code replaced

     -        bool fCreated = wallet->CreateTransaction(vecSend, *newTx, *keyChange, nFeeRequired, nChangePosRet, strFailReason, coinControl);
    
     +        bool fCreated = wallet->CreateTransaction(vecSend, *newTx, *keyChange, nFeeRequired, nChangePosRet, strFailReason, coinControl, nHashType);
    

    Code replaced

     +        LogPrintf("prepareTransaction,fCreated=%i\n",fCreated);
    
     +		LogPrintf("createRawTransaction,500\n");
    

    Log prints

    src/qt/walletmodel.h

     -    SendCoinsReturn prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl = NULL);
    
     +    SendCoinsReturn prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl = NULL, int nHashType = SIGHASH_ALL);
    

    Code replaced

    Smart contract UI :: commit

    https://github.com/wrapperband/Feathercoin/commit/53359e5d7ee85608cfcc8d76362a41c3d405bba9

    src/qt/forms/debugdialog.ui

    Various size changes

     -    <string>Donation Target:</string>
    
    • <string>Co-Payment : Donation Target</string>

    Code replaced

     -    <string>Within a week,Have 500 FTC.If it fails, it will be returned to the donor.</string>
    
     +    <string>Within a week,Have enough FTC.If it fails, it will be returned to the donor.</string>
    

    Code replaced

     +  <widget class="QTableView" name="tableView">
    +   <property name="geometry">
    +    <rect>
    +     <x>10</x>
    +     <y>180</y>
    +     <width>281</width>
    +     <height>161</height> 
    +    </rect>
    

    Example of ui size changes

    Smart contract test1 :: commit

    configure.ac

     - define(_CLIENT_VERSION_BUILD, 4)
    
     + define(_CLIENT_VERSION_BUILD, 5) 
    

    Change the build version

     -    BITCOIN_FIND_BDB61
    
     +    BITCOIN_FIND_BDB51
    

    blockchain database version

    src/main.cpp

     +  LogPrintf("AcceptToMemoryPool,STANDARD_SCRIPT_VERIFY_FLAGS=%i\n", STANDARD_SCRIPT_VERIFY_FLAGS);
    

    Add message

     -    const CScript &scriptSig = ptxTo->vin[nIn].scriptSig;
    
     +    const CScript &scriptSig = ptxTo->vin[nIn].scriptSig;    
     +    //打印此脚本
     +  LogPrintf("CScriptCheck,nIn=%i,scriptSig=%s\n", nIn, scriptSig.ToString());
     +   LogPrintf("CScriptCheck,nIn=%i,scriptPubKey=%s\n", nIn, scriptPubKey.ToString());
    

    Replace code

     +     /*bool r1=VerifyScript(scriptSig, scriptPubKey, nFlags, CachingTransactionSignatureChecker(ptxTo, nIn, cacheStore), &error);
     +     LogPrintf("CScriptCheck,nIn=%i,VerifyScript.r1=%i\n", nIn, r1);
     +     return r1;*/
     +     
     +     /*vector<vector<unsigned char> > stack;
     +     bool r2=EvalScript(stack, scriptSig, nFlags, CachingTransactionSignatureChecker(ptxTo, nIn, cacheStore), &error);
     +     LogPrintf("CScriptCheck,nIn=%i, EvalScript.r2=%i,stack.size=%i\n", nIn, r2, stack.size());
     +     for(int i=0;i<stack.size();i++ ) {
     +     	LogPrintf("CScriptCheck,nIn=%i, stack.size=%i, stack.i=%i,stack=%s\n", nIn, stack.size(), i, HexStr(stack.at(i)).c_str());
     +   	}
     +     bool r3=EvalScript(stack, scriptPubKey, nFlags, CachingTransactionSignatureChecker(ptxTo, nIn, cacheStore), &error);
     +     LogPrintf("CScriptCheck,nIn=%i, EvalScript.r3=%i,stack.size=%i\n", nIn, r3, stack.size());    
     +     for(int i=0;i<stack.size();i++ ) {
     +     	LogPrintf("CScriptCheck,nIn=%i, stack.size=%i, stack.back=%s\n", nIn, stack.size(), HexStr(stack.back()).c_str());
     +     	LogPrintf("CScriptCheck,nIn=%i, stack.size=%i, stack.i=%i,stack=%s\n", nIn, stack.size(), i, HexStr(stack.at(i)).c_str());
     +   	}
     +     return r2;*/
     +   
    

    Additional code

      +   //if (!CheckInputs(tx,                     state,                        view,              true,         STANDARD_SCRIPT_VERIFY_FLAGS, true))
    

    Code removed

      + LogPrintf("CheckInputs,fScriptChecks=%i\n", fScriptChecks);
    

    message added

     + LogPrintf("CheckInputs,1,i=%i, pvChecks=%i,vin.size=%i\n", i, pvChecks, tx.vin.size());
     +  LogPrintf("CheckInputs,1,i=%i, tx.vin[i].prevout=%s\n", i, tx.vin[i].prevout.ToString());
     + LogPrintf("CheckInputs,1,i=%i, txHash=%s\n", i, tx.GetHash().ToString());
     +  LogPrintf("CheckInputs,1,i=%i,flags=%i\n", i, flags);
     +                 
    

    Code added

     -                } else if (!check()) {
    
     +                } else if (!check()) {                		
     +  LogPrintf("CheckInputs,3,i=%i,STANDARD_NOT_MANDATORY_VERIFY_FLAGS=%i\n", i, STANDARD_NOT_MANDATORY_VERIFY_FLAGS);
    

    Code replaced

     +    LogPrintf("CheckInputs,4,i=%i\n", i);
    

    Code added

     +  LogPrintf("CheckInputs,5,i=%i\n", i);
    

    Code added

    src/qt/forms/sendcoinsentry.ui

     +     <layout class="QHBoxLayout" name="horizontalLayoutAmount" stretch="0,1,0,0,0">
    

    Example layout change


  • Moderators

    Feathercoin specific changes made to - FTC 0.11.2.

    Smart Contract Status Review

    Smart contract test1 : : commit

    https://github.com/wrapperband/Feathercoin/commit/a59897340c37dbe5ee3de455a1b7f550022a3503

    src/qt/sendcoinsdialog.cpp

     +    connect(ui->checkSmart, SIGNAL(clicked()), this, SLOT(on_checkSmart_clicked()));
    
    
     +  if (ui->checkSmart->checkState() == Qt::Checked) {
     +      recipient.isSmart = true;
     +      recipient.heightSmart = ui->heightEdit->text().toInt();
     +  	} else { 
     +      recipient.isSmart = false;
     +  	}
     +      	
    

    Additional code

           + }
      + 
      + void SendCoinsEntry::on_checkSmart_clicked()
      + {
      + 		if (ui->checkSmart->checkState() == Qt::Checked) {
      +     	ui->heightEdit->setEnabled(true);
      +   	} else {
      +   		ui->heightEdit->setEnabled(false);
      +   	}
    

    Code added

    src/qt/sendcoinsentry.h

     +    void on_checkSmart_clicked();
    

    Code added

    src/qt/utilitydialog.cpp

    +#include "consensus/validation.h"
    

    Code added

    +    inputRow=0;
    

    Code added

     + //遍历model中的所有数据,构建交易
    

    Code replaced

     -  for (unsigned int i = 0; i < tx.vin.size(); i++)
    
    +  for (unsigned int t = 0; t < tx.vin.size(); t++)
    

    Code replaced

     -  const CTxIn& txin = tx.vin[i];
    
     +  const CTxIn& txin = tx.vin[t];
    
     +  LogPrintf("on_BroadcastBtn_clicked,i=%i, tx.vin[t].prevout=%s\n",i ,tx.vin[t].prevout.ToString());
    
     +  LogPrintf("on_BroadcastBtn_clicked,i=%i,tx.vout.size=%i\n", i, tx.vout.size());
    

    Code added

     -  for (unsigned int i = 0; i < tx.vout.size(); i++ )
     -  const CTxOut& txvout = tx.vout[i];				
    
      +   for (unsigned int t = 0; t < tx.vout.size(); t++ )
      +   const CTxOut& txvout = tx.vout[t];
    

    Code replaced

     -  rawTx.nLockTime = tx.nLockTime;
    
     +  rawTx.nLockTime = tx.nLockTime;  //是否会引起签名验证错误?答案是
     +  LogPrintf("on_BroadcastBtn_clicked,add txvout\n");
    

    Code replaced

      +     
      +     //必须要留出足够的手续费,超出的部分将是手续费
      +     bool fOverrideFees = true; //允许荒谬的高得出奇的手续费
      +     CValidationState state;
      +     bool fMissingInputs;
      +     if (!AcceptToMemoryPool(mempool, state, tx, false, &fMissingInputs, !fOverrideFees)) {
      +         if (state.IsInvalid()) {
      +         		LogPrintf("on_BroadcastBtn_AcceptToMemoryPool,1,RejectCode=%i,Reason=%s\n", state.GetRejectCode(), state.GetRejectReason());
      +         		QMessageBox::information(NULL, tr("Broadcast Message"), tr("AcceptToMemoryPool Fail!GetRejectCode=%1").arg(state.GetRejectCode()), QMessageBox::Yes , QMessageBox::Yes);
      +         		return;
      +         } else {
      +             if (fMissingInputs) {
      +             		LogPrintf("on_BroadcastBtn_AcceptToMemoryPool,2,Missing inputs\n");
      +             		QMessageBox::information(NULL, tr("Broadcast Message"), tr("AcceptToMemoryPool Missing inputs"), QMessageBox::Yes , QMessageBox::Yes);
      +             		return;
      +             }
      +             LogPrintf("on_BroadcastBtn_AcceptToMemoryPool,3,RejectCode=%i,Reason=%s\n", state.GetRejectCode(), state.GetRejectReason());
      +             QMessageBox::information(NULL, tr("Broadcast Message"), tr("AcceptToMemoryPool Fail!GetRejectCode=%1").arg(state.GetRejectCode()), QMessageBox::Yes , QMessageBox::Yes);
      +             return;
      +         }
      +     }
      +     
      +     //广播这个交易
    

    Code added

      + 	    ui->progressBar->setMinimum(0);
      + 	    ui->progressBar->setMaximum(maxCharge);
      + 	    ui->progressBar->setAlignment(Qt::AlignRight | Qt::AlignVCenter); 
      + 	  //ui->progressBar->setRange(0,maxCharge);				
      +  }
    
    
      +  if (getCoins>=maxCharge) {
      +       ui->progressBar->setValue(maxCharge);
      +  }
      +  double dProgress = (ui->progressBar->value() - ui->progressBar->minimum()) * 100.0 / (ui->progressBar->maximum() - ui->progressBar->minimum());
      +  ui->progressBar->setFormat(QString::fromLocal8Bit("processing...%1%").arg(QString::number(dProgress, 'f', 1)));
      +  LogPrintf("on_AddTransBtn_clicked,maxCharge=%d,getCoins=%d,inputRow=%i\n",maxCharge, getCoins, inputRow);
      + 		inputRow++ ;
    

    Code added

    +  LogPrintf("on_AddTransBtn_clicked,totalLabel=%s,nowCoins=%d\n",nowAmount.toStdString(), nowCoins);
    

    Code added

    src/qt/utilitydialog.h

     +    int inputRow;
    

    Code added

    src/qt/walletmodel.cpp

      + LogPrintf("rcp.isSmart=%i\n", rcp.isSmart);
      + LogPrintf("rcp.heightSmart=%i\n", rcp.heightSmart);
    

    Code added

     -  CRecipient recipient = {scriptPubKey, rcp.amount, rcp.fSubtractFeeFromAmount};
    
     + CRecipient recipient ;
     + if (rcp.heightSmart ==0) {
     + 		recipient = {scriptPubKey, rcp.amount, rcp.fSubtractFeeFromAmount};
     + } else {
     + 		recipient = {scriptPubKey, rcp.amount, rcp.fSubtractFeeFromAmount, rcp.heightSmart};
     +					
    

    Code replaced

     -        CMutableTransaction rawTx;
     -        rawTx.nVersion = newTx->nVersion;
    
     +        CMutableTransaction rawTx;        
    

    Code replaced

    src/qt/walletmodel.h

     +    
     +    bool isSmart; // Smart Contract
     +    int heightSmart;
    

    Code moved added


  • Moderators

    Feathercoin specific changes made to - FTC 0.11.2.

    Smart Contract Status Review

    Smart contract test1 : : commit

    https://github.com/wrapperband/Feathercoin/commit/a59897340c37dbe5ee3de455a1b7f550022a3503

    src/script/interpreter.cpp

     -typedef vector<unsigned char> valtype;
    

    Code removed

      -     bool fSuccess = checker.CheckSig(vchSig, vchPubKey, scriptCode);
      -     popstack(stack);
    
    
     +   bool fSuccess = checker.CheckSig(vchSig, vchPubKey, scriptCode);//Debug
     +   //return fSuccess;//Debug
    
    
     -  stack.push_back(fSuccess ? vchTrue : vchFalse);
    
     +  popstack(stack);                    
     +  stack.push_back(fSuccess ? vchTrue : vchFalse);//Debug
    

    Code replaced

     -    if (!EvalScript(stack, scriptPubKey, flags, checker, serror))
    
     +    if (!EvalScript(stack, scriptPubKey, flags, checker, serror)) //Debug_TRUE
         // serror is set
    

    Replace code

     -    if (stack.empty())
      
     +    if (stack.empty()) {
     +    		//return true;//Debug
    

    Replace comment / code

     -    if (CastToBool(stack.back()) == false)
    
     +       }
     +    if (CastToBool(stack.back()) == false) {
     +    		//return true;//Debug_TRUE
    

    Code replaced

    +         	}
    +        if (!CastToBool(stack.back())) {
    +        		//return true;//Debug
    

    Code added

    src/wallet/wallet.cpp

     +bool CWallet::SelectCoins(const CAmount& nTargetValue, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, CAmount& nValueRet, const CCoinControl* coinControl, int nHashType) const
    

    Code added nHashType

     +         if (nHashType != int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))
     +         {
     +         		return (nValueRet >= nTargetValue);
     +         }
     +         else 
     +         {
     +         		return	nTargetValue;
     +         }
    

    Code added

    +   CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, int& nChangePosRet, std::string& strFailReason, const CCoinControl* coinControl, int nHashType)
    

    Code added

     +   LogPrintf("CreateTransaction,false=100\n");
    

    Code added

     +  LogPrintf("CreateTransaction,false=200\n");
    

    Code added

     + 		int nLockTime=0;
     + 		BOOST_FOREACH (const CRecipient& recipient, vecSend)
     + 		{
     + 				if (recipient.heightSmart>0) {
     + 					nLockTime = recipient.heightSmart;
     + 				}
     + 		}
    

    Code added

     + 		if (nHashType == int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))   {
     + 				txNew.nLockTime = nLockTime;
     + 		}
     + 		//Time(UTC):	1480245414/2016/11/27 19:16:54  /http://tool.chinaz.com/Tools/unixtime.aspx
     + 		LogPrintf("CreateTransaction,nLockTime=%d\n",txNew.nLockTime);//1484594 "lock_time": 1484594, heightEdit
     + 		
    

    Code added

     + LogPrintf("CreateTransaction,false=300\n");
    

    Code added

      -                if (!SelectCoins(nTotalValue, setCoins, nValueIn, coinControl))
    
     +                if (!SelectCoins(nTotalValue, setCoins, nValueIn, coinControl, nHashType))
    

    Code replaced

     +                    LogPrintf("CreateTransaction,false=400\n");
    
     +                    LogPrintf("CreateTransaction,false=500\n");
    
     +                    if (!SignSignature(*this, *coin.first, txNew, nIn++, nHashType))
    
     +                    LogPrintf("CreateTransaction,false=600\n");
    
     +                    LogPrintf("CreateTransaction,false=700\n");
    
     +                    LogPrintf("CreateTransaction,false=800\n");
    
     +    bool rv = CreateTransaction(vecSend, wtxNew, reservekey, nFeeRet, nChangePos, strError, coinControl, SIGHASH_ALL);
    

    Code added

    src/wallet/wallet.h

     +    int	heightSmart;
    
     +    bool SelectCoins(const CAmount& nTargetValue, std::set<std::pair<const CWalletTx*,unsigned int> >& setCoinsRet, CAmount& nValueRet, const CCoinControl *coinControl = NULL, int nHashType=SIGHASH_ALL) const;
    
     +                           CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, int& nChangePosRet, std::string& strFailReason, const CCoinControl *coinControl = NULL, int nHashType=SIGHASH_ALL);//ʵÏÖ
    
     +                           CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl *coinControl = NULL);//Èë¿Ú
    

    Code replaced


  • Moderators

    Feathercoin specific changes made to - FTC 0.11.2.

    Smart Contract Status Review

    Active blockheader version 4.0 : : commit

    https://github.com/wrapperband/Feathercoin/commit/bcc6a7f88763f5fd04107cb1eb9ea56ab8fbff70

    src/chain.h

     -    int cVersion;
    

    Code removed

     -  cVersion       = 0;
    

    Code removed

     -  cVersion       = block.cVersion;
    

    Code removed

     -  block.cVersion       = cVersion;
    
    -  READWRITE(this->cVersion);
    
     - block.cVersion        = cVersion;
    

    Code removed

    src/main.cpp

     - static bool IsSuperMajority(int minVersion, int min_cVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams);
    
     + static bool IsSuperMajority(int minVersion,  const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams);
    

    Code replaced

     -    int cUpgraded = 0;
    

    Code removed

     -    if (pindex->cVersion > CBlock::ACTIVE_VERSION)
     -         	++cUpgraded;
    

    Code removed

     -        if (cUpgraded > 0)
     -            LogPrintf("%s: %d of last 500 blocks above nVersion %d\n", __func__, nUpgraded, (int)CBlock::CURRENT_VERSION);
    

    Code removed

     -        if ((nUpgraded > 500/2)||(cUpgraded > 500/2))
    
     +        if (nUpgraded > 500/2)
    

    Code replaced

     -    if (block.nVersion < 2 && IsSuperMajority(2,5, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    
     +    if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    

    Code replaced

      -    if (block.nVersion < 3 && IsSuperMajority(3,5, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    
      +    if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    

    Code replaced

      -    if (block.nVersion < 4 && IsSuperMajority(4,5, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    
      +    if (block.nVersion < 4 && IsSuperMajority(4, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    

    Code replaced

     -    if (block.cVersion < 5 && IsSuperMajority(4,5, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
    
     +    if (block.cVersion < 5 && IsSuperMajority(4, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams)) 
    

    Code replaced

      -    	                     && IsSuperMajority(2, 5,pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
    
     +    	                     && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
    

    Code replaced

     -    	                     && IsSuperMajority(4, 5, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
    
     +    	                     && IsSuperMajority(4, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
    

    Code replaced

     -static bool IsSuperMajority(int minVersion,int min_cVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams)
    
    +static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned nRequired, const Consensus::Params& consensusParams)
    

    Code replaced

     -    unsigned int cFound = 0;
    

    Code removed

     -    LogPrintf("IsSuperMajority: minVersion=%d,min_cVersion=%d, nRequired=%d, nFound=%d, cFound=%d\n",minVersion, min_cVersion, nRequired, nFound, cFound);
     -    return ((nFound >= nRequired)||(cFound >= nRequired));
    
    
    
     +    LogPrintf("IsSuperMajority: minVersion=%d, nRequired=%d, nFound=%d\n",minVersion, nRequired, nFound);
     +    return (nFound >= nRequired);
    

    Code replaced

    src/primitives/block.h

     -    static const int32_t ACTIVE_VERSION=4;
     -    static const int32_t CURRENT_VERSION=2;  //be locked 
    
     +    static const int32_t CURRENT_VERSION=4;  //active new version
    

    Code replaced

     -        cVersion = CBlockHeader::ACTIVE_VERSION;
    

    Code removed


 

This website uses cookies to improve your experience. Cookies are used to maintain session information for logged in users. By using this site, reading or posting content you agree to the use of cookies.
You can delete the cookies set in the privacy settings of your browser after leaving this site

Read more in our Privacy Policy