diff --git a/contract/vm_callback.go b/contract/vm_callback.go index 1e9488a74..9d952d79f 100644 --- a/contract/vm_callback.go +++ b/contract/vm_callback.go @@ -54,7 +54,8 @@ var ( ) const ( - maxEventCnt = 50 + maxEventCntV2 = 50 + maxEventCntV4 = 128 maxEventNameSize = 64 maxEventArgSize = 4096 luaCallCountDeduc = 1000 @@ -66,6 +67,14 @@ func init() { zeroBig = types.NewZeroAmount() } +func maxEventCnt(ctx *vmContext) int32 { + if ctx.blockInfo.ForkVersion >= 4 { + return maxEventCntV4 + } else { + return maxEventCntV2 + } +} + //export luaSetDB func luaSetDB(L *LState, service C.int, key unsafe.Pointer, keyLen C.int, value *C.char) *C.char { ctx := contexts[service] @@ -1293,8 +1302,8 @@ func luaEvent(L *LState, service C.int, eventName *C.char, args *C.char) *C.char if ctx.isQuery == true || ctx.nestedView > 0 { return C.CString("[Contract.Event] event not permitted in query") } - if ctx.eventCount >= maxEventCnt { - return C.CString(fmt.Sprintf("[Contract.Event] exceeded the maximum number of events(%d)", maxEventCnt)) + if ctx.eventCount >= maxEventCnt(ctx) { + return C.CString(fmt.Sprintf("[Contract.Event] exceeded the maximum number of events(%d)", maxEventCnt(ctx))) } if len(C.GoString(eventName)) > maxEventNameSize { return C.CString(fmt.Sprintf("[Contract.Event] exceeded the maximum length of event name(%d)", maxEventNameSize))