At the moment AddressStd can be either addr_none$00 or addr_std$10.
See also the address_std on TVM-Solidity.
On TVM-Solidity opcode LDMSGADDR is used to load address_std. The opcode can load an external address. It can cause inconsistent data.
optional(address_std) is encoded as one bit (does it have a value?) and then the address.
Code generated for loading optional(address_std):
LDI 1
SWAP
NULLROTRIFNOT
PUSHCONT {
LDMSGADDR
}
IF
Code generated for storing optional(address_std):
ISNULL
PUSHCONT {
DROP
STZERO
}
PUSHCONT {
SWAP
STONE
STSLICE
}
IFELSE
Proposals:
- Support new abi version 2.8.0
- AddressStd can take only [addr_std$10]. On Solidity, we use LDSTDADDR opcode
optional(address_std) is serialized as addr_std$10 for null value or addr_std$10. On TVM-Solidity we use just one opcode to encode/decode value: LDOPTSTDADDR/STOPTSTDADDR
Breaking changes:
Old contracts cannot send messages to new ones if:
- the old contract used [addr_std$10] for
address_std in messages
- the old contract used
optional(address_std) in messages
At the moment AddressStd can be either addr_none$00 or addr_std$10.
See also the address_std on TVM-Solidity.
On TVM-Solidity opcode
LDMSGADDRis used to loadaddress_std. The opcode can load an external address. It can cause inconsistent data.optional(address_std)is encoded as one bit (does it have a value?) and then the address.Code generated for loading
optional(address_std):Code generated for storing
optional(address_std):Proposals:
optional(address_std)is serialized asaddr_std$10fornullvalue oraddr_std$10. On TVM-Solidity we use just one opcode to encode/decode value: LDOPTSTDADDR/STOPTSTDADDRBreaking changes:
Old contracts cannot send messages to new ones if:
address_stdin messagesoptional(address_std)in messages