diff --git a/code/bip-table.py b/code/bip-table.py deleted file mode 100644 index bc0ebdd9..00000000 --- a/code/bip-table.py +++ /dev/null @@ -1,43 +0,0 @@ - -# Convert mediawiki list of BIPs to asciidoc table for book appendix -# Gnarly hack of regex with no error checking - it worked once - -import re - -regex_num = re.compile("\\|.\\[\\[bip-\\d+.mediawiki\\|(\\d+)\\]\\]") -regex_altnum = re.compile("\\D+(\\d+)\\D+") - -bips = [] - -f = open('README.mediawiki.txt', 'r') - -line = f.readline() - -while (line[0] != "|"): - line = f.readline() - -while (line[1] == '-'): - line_num = f.readline() - line_layer = f.readline()[2:-1] - line_title = f.readline()[2:-1] - line_owner = f.readline()[2:-1] - line_type = f.readline()[2:-1] - line_status = f.readline()[2:-1] - line = f.readline() - while (line[0] != "|"): - line = f.readline() - - num = regex_num.match(line_num) - alt_num = regex_altnum.match(line_num) - if num: - bip_num = num.group(1) - elif alt_num: - bip_num = alt_num.group(1) - - print("|[[bip-{0}]]https://github.com/bitcoin/bips/blob/master/bip-{0:04d}" - ".mediawiki[BIP-{0}] |{1} |{2} |{3} |{4} ".format(int(bip_num), - line_title, - line_owner, - line_type, - line_status)) -f.close() diff --git a/code/extract-from-pk-script.go b/code/extract-from-pk-script.go deleted file mode 100644 index 4bebb741..00000000 --- a/code/extract-from-pk-script.go +++ /dev/null @@ -1,45 +0,0 @@ -package main - -import ( - "encoding/hex" - "fmt" - "os" - - "github.com/conformal/btcnet" - "github.com/conformal/btcscript" -) - -// go run extract-from-pk-script.go - -// This example demonstrates extracting information from a standard public key -// script. - -func main() { - scriptHex := "76a914128004ff2fcaf13b2b91eb654b1dc2b674f7ec6188ac" - - ExtractPkScriptAddrs(scriptHex) - // Output: - // Script Class: pubkeyhash - // Addresses: [12gpXQVcCL2qhTNQgyLVdCFG2Qs2px98nV] - // Required Signatures: 1 -} - -func ExtractPkScriptAddrs(scriptHex string) { - script, err := hex.DecodeString(scriptHex) - handle(err) - - // Extract and print details from the script. - scriptClass, addresses, reqSigs, err := btcscript.ExtractPkScriptAddrs(script, &btcnet.MainNetParams) - handle(err) - - fmt.Println("Script Class:", scriptClass) - fmt.Println("Addresses:", addresses) - fmt.Println("Required Signatures:", reqSigs) -} - -func handle(err error) { - if err != nil { - fmt.Println(err) - os.Exit(1) - } -} diff --git a/code/p2wpkh.js b/code/p2wpkh.js deleted file mode 100644 index 31ec1ca8..00000000 --- a/code/p2wpkh.js +++ /dev/null @@ -1,8 +0,0 @@ -var btc = require('bitcore-lib') -var oldAddress = btc.Address.fromString("1Ek9S3QNnutPV7GhtzR8Lr8yKPhxnUP8iw") // here's the old address -var oldHash = oldAddress.hashBuffer -var segwitP2PKH = Buffer.concat([new Buffer("0014","hex"), oldHash]) // 0x00 + 0x14 (pushdata 20 bytes) + old pubkeyhash -var p2shHash = btc.crypto.Hash.sha256ripemd160(segwitP2PKH) -var p2shAddress = btc.Address.fromScriptHash(p2shHash) -var newAddress = p2shAddress.toString() -// 36ghjA1KSAB1jDYD2RdiexEcY7r6XjmDQk diff --git a/code/pay-to-addr-script.go b/code/pay-to-addr-script.go deleted file mode 100644 index 2654ed0f..00000000 --- a/code/pay-to-addr-script.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/conformal/btcnet" - "github.com/conformal/btcscript" - "github.com/conformal/btcutil" -) - -// This example demonstrates creating a script which pays to a Bitcoin address. -// It also prints the created script hex and uses the DisasmString function to -// display the disassembled script. - -func main() { - addressStr := "12gpXQVcCL2qhTNQgyLVdCFG2Qs2px98nV" - - PayToAddrScript(addressStr) - // Output: - // Script Hex: 76a914128004ff2fcaf13b2b91eb654b1dc2b674f7ec6188ac - // Script Disassembly: OP_DUP OP_HASH160 128004ff2fcaf13b2b91eb654b1dc2b674f7ec61 OP_EQUALVERIFY OP_CHECKSIG -} - -func PayToAddrScript(addressStr string) { - // Parse the address to send the coins to into a btcutil.Address - // which is useful to ensure the accuracy of the address and determine - // the address type. It is also required for the upcoming call to - // PayToAddrScript. - address, err := btcutil.DecodeAddress(addressStr, &btcnet.MainNetParams) - handle(err) - - // Create a public key script that pays to the address. - script, err := btcscript.PayToAddrScript(address) - handle(err) - fmt.Printf("Script Hex: %x\n", script) - - disasm, err := btcscript.DisasmString(script) - handle(err) - fmt.Println("Script Disassembly:", disasm) -} - -func handle(err error) { - if err != nil { - fmt.Println(err) - os.Exit(1) - } -} diff --git a/code/select-utxo.py b/code/select-utxo.py deleted file mode 100644 index c70aa38f..00000000 --- a/code/select-utxo.py +++ /dev/null @@ -1,71 +0,0 @@ -# Selects outputs from a UTXO list using a greedy algorithm. - -from sys import argv - -try: - long # Python 2 -except NameError: - long = int # Python 3 - - -class OutputInfo: - def __init__(self, tx_hash, tx_index, value): - self.tx_hash = tx_hash - self.tx_index = tx_index - self.value = value - - def __repr__(self): - return "<%s:%s with %s Satoshis>" % (self.tx_hash, self.tx_index, - self.value) - - -# Select optimal outputs for a send from unspent outputs list. -# Returns output list and remaining change to be sent to -# a change address. -def select_outputs_greedy(unspent, min_value): - # Fail if empty. - if not unspent: - return None - # Partition into 2 lists. - lessers = [utxo for utxo in unspent if utxo.value < min_value] - greaters = [utxo for utxo in unspent if utxo.value >= min_value] - key_func = lambda utxo: utxo.value - if greaters: - # Not-empty. Find the smallest greater. - min_greater = min(greaters, key=key_func) - change = min_greater.value - min_value - return [min_greater], "Change: %d Satoshis" % change - # Not found in greaters. Try several lessers instead. - # Rearrange them from biggest to smallest. We want to use the least - # amount of inputs as possible. - lessers.sort(key=key_func, reverse=True) - result = [] - accum = 0 - for utxo in lessers: - result.append(utxo) - accum += utxo.value - if accum >= min_value: - change = accum - min_value - return result, "Change: %d Satoshis" % change - # No results found. - return None, 0 - - -def main(): - unspent = [ - OutputInfo("ebadfaa92f1fd29e2fe296eda702c48bd11ffd52313e986e99ddad9084062167", 1, 8000000), - OutputInfo("6596fd070679de96e405d52b51b8e1d644029108ec4cbfe451454486796a1ecf", 0, 16050000), - OutputInfo("b2affea89ff82557c60d635a2a3137b8f88f12ecec85082f7d0a1f82ee203ac4", 0, 10000000), - OutputInfo("7dbc497969c7475e45d952c4a872e213fb15d45e5cd3473c386a71a1b0c136a1", 0, 25000000), - OutputInfo("55ea01bd7e9afd3d3ab9790199e777d62a0709cf0725e80a7350fdb22d7b8ec6", 17, 5470541), - OutputInfo("12b6a7934c1df821945ee9ee3b3326d07ca7a65fd6416ea44ce8c3db0c078c64", 0, 10000000), - OutputInfo("7f42eda67921ee92eae5f79bd37c68c9cb859b899ce70dba68c48338857b7818", 0, 16100000), - ] - target = long(argv[1]) if len(argv) > 1 else 55000000 - print("For transaction amount %d Satoshis (%f bitcoin) use: " % - (target, target / 10.0 ** 8)) - print(select_outputs_greedy(unspent, target)) - - -if __name__ == "__main__": - main() diff --git a/code/websocket-example.go b/code/websocket-example.go deleted file mode 100644 index a776ca4e..00000000 --- a/code/websocket-example.go +++ /dev/null @@ -1,86 +0,0 @@ -package main - -import ( - "io/ioutil" - "log" - "path/filepath" - "time" - - "github.com/conformal/btcrpcclient" - "github.com/conformal/btcutil" - "github.com/conformal/btcwire" -) - -// This example demonstrates a connection to the Bitcoin network -// by using websockets via btcd, use of notifications and an rpc -// call to getblockcount. -// -// Install and run btcd: -// $ go get github.com/conformal/btcd/... -// $ btcd -u rpcuser -P rpcpass -// -// Install btcrpcclient: -// $ go get github.com/conformal/btcrpcclient -// -// Run this example: -// $ go run websocket-example.go -// -func main() { - // Only override the handlers for notifications you care about. - // Also note most of these handlers will only be called if you register - // for notifications. See the documentation of the btcrpcclient - // NotificationHandlers type for more details about each handler. - ntfnHandlers := btcrpcclient.NotificationHandlers{ - OnBlockConnected: func(hash *btcwire.ShaHash, height int32) { - log.Printf("Block connected: %v (%d)", hash, height) - }, - OnBlockDisconnected: func(hash *btcwire.ShaHash, height int32) { - log.Printf("Block disconnected: %v (%d)", hash, height) - }, - } - - // Connect to local btcd RPC server using websockets. - btcdHomeDir := btcutil.AppDataDir("btcd", false) - certs, err := ioutil.ReadFile(filepath.Join(btcdHomeDir, "rpc.cert")) - if err != nil { - log.Fatal(err) - } - connCfg := &btcrpcclient.ConnConfig{ - Host: "localhost:8334", - Endpoint: "ws", - User: "rpcuser", - Pass: "rpcpass", - Certificates: certs, - } - client, err := btcrpcclient.New(connCfg, &ntfnHandlers) - if err != nil { - log.Fatal(err) - } - - // Register for block connect and disconnect notifications. - if err := client.NotifyBlocks(); err != nil { - log.Fatal(err) - } - log.Println("NotifyBlocks: Registration Complete") - - // Get the current block count. - blockCount, err := client.GetBlockCount() - if err != nil { - log.Fatal(err) - } - log.Printf("Block count: %d", blockCount) - - // For this example gracefully shutdown the client after 10 seconds. - // Ordinarily when to shutdown the client is highly application - // specific. - log.Println("Client shutdown in 10 seconds...") - time.AfterFunc(time.Second*10, func() { - log.Println("Client shutting down...") - client.Shutdown() - log.Println("Client shutdown complete.") - }) - - // Wait until the client either shuts down gracefully (or the user - // terminates the process with Ctrl+C). - client.WaitForShutdown() -}