mirror of
				https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
				synced 2025-10-31 18:37:36 +00:00 
			
		
		
		
	Update 8_1_Understanding_the_Foundation_of_P2SH.md
This commit is contained in:
		
							parent
							
								
									2e3025eeb5
								
							
						
					
					
						commit
						0966b09fac
					
				| @ -67,6 +67,8 @@ _Why are P2SH scripts limited to 520 bytes?_ As with many things in Bitcoin, the | |||||||
| 
 | 
 | ||||||
| Serializing a locking script is a two-part process. First, you must turn it into hexcode, then you must transform that hex into binary. | Serializing a locking script is a two-part process. First, you must turn it into hexcode, then you must transform that hex into binary. | ||||||
| 
 | 
 | ||||||
|  | _If what follows looks intimidating, don't worry about it; this will usually be done with an API. As we lay bare the foundation of P2SH Scripting, we're mostly explaining what those APIs will do._ | ||||||
|  | 
 | ||||||
| #### Create the Hex Code | #### Create the Hex Code | ||||||
| 
 | 
 | ||||||
| Creating the hexcode that is necessary to serialize a script is both a simple translation and something that's complex enough that it goes beyond any shell script that you're likely to write. As with a few other aspects of P2SH scripts, it's something that you'll probably process through an API, not by hand. | Creating the hexcode that is necessary to serialize a script is both a simple translation and something that's complex enough that it goes beyond any shell script that you're likely to write. As with a few other aspects of P2SH scripts, it's something that you'll probably process through an API, not by hand. | ||||||
| @ -92,7 +94,7 @@ $ hex=$(printf '%08x\n' $integer | sed 's/^\(00\)*//') | |||||||
| $ echo $hex | $ echo $hex | ||||||
| 5c2a7b9f | 5c2a7b9f | ||||||
| ``` | ``` | ||||||
| Third, you need to add a byte of `00` if the top digit is "8" or greater, so that it's not interpretted as a negative number. | Third, you need to add a top byte of `00` if the top digit is "8" or greater, so that it's not interpretted as a negative number. | ||||||
| ``` | ``` | ||||||
| $ hexfirst=$(echo $hex | cut -c1) | $ hexfirst=$(echo $hex | cut -c1) | ||||||
| $ [[ 0x$hexfirst -gt 0x7 ]] && hex="00"$hex | $ [[ 0x$hexfirst -gt 0x7 ]] && hex="00"$hex | ||||||
| @ -103,7 +105,7 @@ $ lehex=$(echo $hex | tac -rs .. | echo "$(tr -d '\n')") | |||||||
| $ echo $lehex | $ echo $lehex | ||||||
| 9f7b2a5c | 9f7b2a5c | ||||||
| ``` | ``` | ||||||
| In addition, you'll always need to know the size of your constants. You can just remember that every two hexidecimal characters is one byte. Or, you can use `echo -n` piped to `wc -c`, and divide that in two: | In addition, you'll always need to know the size of your integers. You can just remember that every two hexidecimal characters is one byte. Or, you can use `echo -n` piped to `wc -c`, and divide that in two: | ||||||
| ``` | ``` | ||||||
| $ echo -n $lehex | wc -c | awk '{print $1/2}' | $ echo -n $lehex | wc -c | awk '{print $1/2}' | ||||||
| 4 | 4 | ||||||
| @ -117,8 +119,6 @@ $ echo $neglehex | |||||||
| 9f7b2adc | 9f7b2adc | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| _If this is intimidating, don't worry about it; as we said, this will usually be done with an API. As we lay bare the foundation of P2SH Scripting, we're mostly explaining what those APIs will do._ |  | ||||||
| 
 |  | ||||||
| #### Create the Hex Code: A Multisig Example | #### Create the Hex Code: A Multisig Example | ||||||
| 
 | 
 | ||||||
| It may be easier to understand this by taking an existing hexcode and translating it back to Bitcoin Script. For example, look at the `redeemScript` that you used [§6.1](6_1_Sending_a_Transaction_to_a_Multisig.md): | It may be easier to understand this by taking an existing hexcode and translating it back to Bitcoin Script. For example, look at the `redeemScript` that you used [§6.1](6_1_Sending_a_Transaction_to_a_Multisig.md): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user