code: func makeLog(size int) executionFunc {
  	return func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
  		topics := make([]common.Hash, size)
  		mStart, mSize := stack.pop(), stack.pop()
  		for i := 0; i < size; i++ {
  			topics[i] = common.BigToHash(stack.pop())
  		}
  
  		d := memory.Get(mStart.Int64(), mSize.Int64())
  		interpreter.evm.StateDB.AddLog(&types.Log{
  			Address: contract.Address(),
  			Topics:  topics,
  			Data:    d,
  			// This is a non-consensus field, but assigned here because
  			// core/state doesn't know the current block number.
  			BlockNumber: interpreter.evm.BlockNumber.Uint64(),
  		})
  
  		interpreter.intPool.put(mStart, mSize)
  		return nil, nil
  	}
  }
docs: // following functions are used by the instruction jump  table
  // make log instruction function