Supported Feathercoin client versions: Current production Version: 0.13.1.

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 or use the shoutbox

[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


 

Looks like your connection to Feathercoin Forum was lost, please wait while we try to reconnect.