所在commit地址
@@ -66,7 +66,81 @@ contract CERTFActor is BaseActor {
             extension
         );
 
-        emit InitializedAsset(assetId, ContractType.CEG, ownership.creatorObligor, ownership.counterpartyObligor);
+        emit InitializedAsset(assetId, ContractType.CERTF, ownership.creatorObligor, ownership.counterpartyObligor);
+    }
+
+    function computePayoffForEvent(
+        bytes32 assetId,
+        address engine,
+        CERTFTerms memory terms,
+        CERTFState memory state,
+        bytes32 _event
+    )
+        internal
+        view
+        returns (int256)
+    {
+        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);
+
+        uint256 timestamp;
+        {
+            // apply shift calc to schedule time
+            timestamp = shiftCalcTime(
+                scheduleTime,
+                terms.businessDayConvention,
+                terms.calendar,
+                terms.maturityDate
+            );
+        }
+        
+        bytes memory externalDataPOF;
+        { externalDataPOF = getExternalDataForPOF(assetId, eventType, timestamp); }
+
+        return (
+            ICERTFEngine(engine).computePayoffForEvent(
+                terms,
+                state,
+                _event,
+                externalDataPOF
+            )
+        );
+    }
+
+    function computeStateForEvent(
+        bytes32 assetId,
+        address engine,
+        CERTFTerms memory terms,
+        CERTFState memory state,
+        bytes32 _event
+    )
+        internal
+        view
+        returns (CERTFState memory)
+    {
+        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);
+
+        uint256 timestamp;
+        {
+            // apply shift calc to schedule time
+            timestamp = shiftCalcTime(
+                scheduleTime,
+                terms.businessDayConvention,
+                terms.calendar,
+                terms.maturityDate
+            );
+        }
+        
+        bytes memory externalDataSTF;
+        { externalDataSTF = getExternalDataForSTF(assetId, eventType, timestamp); }
+
+        return (
+            ICERTFEngine(engine).computeStateForEvent(
+                terms,
+                state,
+                _event,
+                externalDataSTF
+            )
+        );
     }
 
     /**
@@ -87,30 +161,12 @@ contract CERTFActor is BaseActor {
             state = ICERTFRegistry(address(assetRegistry)).getFinalizedState(assetId);
         }
 
-        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);
+        (, uint256 scheduleTime) = decodeEvent(_event);
 
         // get external data for the next event
         // compute payoff and the next state by applying the event to the current state
-        int256 payoff = ICERTFEngine(engine).computePayoffForEvent(
-            terms,
-            state,
-            _event,
-            getExternalDataForPOF(
-                assetId,
-                eventType,
-                shiftCalcTime(scheduleTime, terms.businessDayConvention, terms.calendar, terms.maturityDate)
-            )
-        );
-        CERTFState memory nextState = ICERTFEngine(engine).computeStateForEvent(
-            terms,
-            state,
-            _event,
-            getExternalDataForSTF(
-                assetId,
-                eventType,
-                shiftCalcTime(scheduleTime, terms.businessDayConvention, terms.calendar, terms.maturityDate)
-            )
-        );
+        int256 payoff = computePayoffForEvent(assetId, engine, terms, state, _event);
+        CERTFState memory nextState = computeStateForEvent(assetId, engine, terms, state, _event);
 
         // try to settle payoff of event
         bool settledPayoff = settlePayoffForEvent(assetId, _event, payoff);
@@ -131,16 +187,7 @@ contract CERTFActor is BaseActor {
             bytes32 ceEvent = encodeEvent(EventType.CE, scheduleTime);
 
             // derive the actual state of the asset by applying the CreditEvent (updates performance of asset)
-            nextState = ICERTFEngine(engine).computeStateForEvent(
-                terms,
-                state,
-                ceEvent,
-                getExternalDataForSTF(
-                    assetId,
-                    EventType.CE,
-                    shiftCalcTime(scheduleTime, terms.businessDayConvention, terms.calendar, terms.maturityDate)
-                )
-            );
+            nextState = computeStateForEvent(assetId, engine, terms, state, ceEvent);
         }
 
         // store the resulting state

message:

李蓝天:改动分类:原因:

刘志浩:改动分类:原因: