@@ -180,21 +180,21 @@ func (a AssetFingerprint) String() string {
180180}
181181
182182const (
183- addressHeaderTypeMask = 0xF0
184- addressHeaderNetworkMask = 0x0F
185- addressHashSize = 28
186-
187- addressTypeKeyKey = 0b0000
188- addressTypeScriptKey = 0b0001
189- addressTypeKeyScript = 0b0010
190- addressTypeScriptScript = 0b0011
191- addressTypeKeyPointer = 0b0100
192- addressTypeScriptPointer = 0b0101
193- addressTypeKeyNone = 0b0110
194- addressTypeScriptNone = 0b0111
195- addressTypeByron = 0b1000
196- addressTypeNoneKey = 0b1110
197- addressTypeNoneScript = 0b1111
183+ AddressHeaderTypeMask = 0xF0
184+ AddressHeaderNetworkMask = 0x0F
185+ AddressHashSize = 28
186+
187+ AddressTypeKeyKey = 0b0000
188+ AddressTypeScriptKey = 0b0001
189+ AddressTypeKeyScript = 0b0010
190+ AddressTypeScriptScript = 0b0011
191+ AddressTypeKeyPointer = 0b0100
192+ AddressTypeScriptPointer = 0b0101
193+ AddressTypeKeyNone = 0b0110
194+ AddressTypeScriptNone = 0b0111
195+ AddressTypeByron = 0b1000
196+ AddressTypeNoneKey = 0b1110
197+ AddressTypeNoneScript = 0b1111
198198)
199199
200200type Address struct {
@@ -219,18 +219,28 @@ func NewAddress(addr string) (Address, error) {
219219 return a , nil
220220}
221221
222+ // NewAddressFromParts returns an Address based on the individual parts of the address that are provided
223+ func NewAddressFromParts (addrType uint8 , networkId uint8 , paymentAddr []byte , stakingAddr []byte ) Address {
224+ return Address {
225+ addressType : addrType ,
226+ networkId : networkId ,
227+ paymentAddress : paymentAddr ,
228+ stakingAddress : stakingAddr ,
229+ }
230+ }
231+
222232func (a * Address ) populateFromBytes (data []byte ) {
223233 // Extract header info
224234 header := data [0 ]
225- a .addressType = (header & addressHeaderTypeMask ) >> 4
226- a .networkId = header & addressHeaderNetworkMask
235+ a .addressType = (header & AddressHeaderTypeMask ) >> 4
236+ a .networkId = header & AddressHeaderNetworkMask
227237 // Extract payload
228238 // NOTE: this is probably incorrect for Byron
229239 payload := data [1 :]
230- a .paymentAddress = payload [:addressHashSize ]
231- a .stakingAddress = payload [addressHashSize :]
240+ a .paymentAddress = payload [:AddressHashSize ]
241+ a .stakingAddress = payload [AddressHashSize :]
232242 // Adjust stake addresses
233- if a .addressType == addressTypeNoneKey || a .addressType == addressTypeNoneScript {
243+ if a .addressType == AddressTypeNoneKey || a .addressType == AddressTypeNoneScript {
234244 a .stakingAddress = a .paymentAddress [:]
235245 a .paymentAddress = make ([]byte , 0 )
236246 }
@@ -252,11 +262,11 @@ func (a *Address) MarshalCBOR() ([]byte, error) {
252262
253263// StakeAddress returns a new Address with only the stake key portion. This will return nil if the address is not a payment/staking key pair
254264func (a Address ) StakeAddress () * Address {
255- if a .addressType != addressTypeKeyKey && a .addressType != addressTypeScriptKey {
265+ if a .addressType != AddressTypeKeyKey && a .addressType != AddressTypeScriptKey {
256266 return nil
257267 }
258268 newAddr := & Address {
259- addressType : addressTypeNoneKey ,
269+ addressType : AddressTypeNoneKey ,
260270 networkId : a .networkId ,
261271 stakingAddress : a .stakingAddress [:],
262272 }
@@ -265,7 +275,7 @@ func (a Address) StakeAddress() *Address {
265275
266276func (a Address ) generateHRP () string {
267277 var ret string
268- if a .addressType == addressTypeNoneKey || a .addressType == addressTypeNoneScript {
278+ if a .addressType == AddressTypeNoneKey || a .addressType == AddressTypeNoneScript {
269279 ret = "stake"
270280 } else {
271281 ret = "addr"
@@ -280,7 +290,7 @@ func (a Address) generateHRP() string {
280290// Bytes returns the underlying bytes for the address
281291func (a Address ) Bytes () []byte {
282292 ret := []byte {}
283- ret = append (ret , (byte (a .addressType )<< 4 )| (byte (a .networkId )& addressHeaderNetworkMask ))
293+ ret = append (ret , (byte (a .addressType )<< 4 )| (byte (a .networkId )& AddressHeaderNetworkMask ))
284294 ret = append (ret , a .paymentAddress ... )
285295 ret = append (ret , a .stakingAddress ... )
286296 return ret
@@ -289,7 +299,7 @@ func (a Address) Bytes() []byte {
289299// String returns the bech32-encoded version of the address
290300func (a Address ) String () string {
291301 data := a .Bytes ()
292- if a .addressType == addressTypeByron {
302+ if a .addressType == AddressTypeByron {
293303 // Encode data to base58
294304 encoded := base58 .Encode (data )
295305 return encoded
0 commit comments