no need to share any debugs, the parent call already received the value so it is on the balance of the calling contract already. using msg.value with delegate call has no meaning at all since the balance of contract already contains the value, you could use it to know how much was transferred, though
For reference:
Call() is declared in the EVM with value
parameter:
func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas uint64, value *uint256.Int) (ret []byte, leftOverGas uint64, err error) {
But DelegateCall() has the value
parameter absent , because it is not needed anymore:
func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) {
The msg.value
is stored in a transaction context variable, so it will stay there until last instruction of transaction is executed
These functions are located in core/vm/evm.go
file (of official go-ethereum sources) , if you need more info.
value
so it is on the balance of the calling contract already. usingmsg.value
with delegate call has no meaning at all since the balance of contract already contains the value, you could use it to know how much was transferred, though