| 512 | } |
| 513 | |
| 514 | CScript GetScriptForWitness(const CScript& redeemscript) |
| 515 | { |
| 516 | CScript ret; |
| 517 | |
| 518 | txnouttype typ; |
| 519 | std::vector<std::vector<unsigned char> > vSolutions; |
| 520 | if (Solver(redeemscript, typ, vSolutions)) { |
| 521 | if (typ == TX_PUBKEY) { |
| 522 | return GetScriptForDestination(WitnessV0KeyHash(Hash160(vSolutions[0].begin(), vSolutions[0].end()))); |
| 523 | } else if (typ == TX_PUBKEYHASH) { |
| 524 | return GetScriptForDestination(WitnessV0KeyHash(vSolutions[0])); |
| 525 | } |
| 526 | } |
| 527 | uint256 hash; |
| 528 | CSHA256().Write(&redeemscript[0], redeemscript.size()).Finalize(hash.begin()); |
| 529 | return GetScriptForDestination(WitnessV0ScriptHash(hash)); |
| 530 | } |
| 531 | |
| 532 | bool IsValidDestination(const CTxDestination& dest) { |
| 533 | return dest.which() != 0; |