anchor.diff:  
       AppLog = [tuple([addr(CPub), addr(APub), word(15000)]),
                 tuple([addr(BPub), addr(APub), word(15000)])],
  +    call_func(APub, APriv, EncCPub, <<"getApprovalLog">>, <<"()">>,
  +              {<<"list((address,address,int))">>, AppLog}),
  +
  +    force_fun_calls(Node),
  +
  +    %% Request a bad transfer and check that abort restores the state.
  +    revert_call_compute_func(Node, APub, APriv, EncCPub,
  +                             <<"transferFrom">>,
  +                             args_to_binary([BPub,DPub,100000])),
  +
  +    call_func(APub, APriv, EncCPub, <<"balanceOf">>, args_to_binary([BPub]), {<<"int">>, 10000}),
  +    call_func(APub, APriv, EncCPub, <<"balanceOf">>, args_to_binary([CPub]), {<<"int">>, 10000}),
  +    call_func(APub, APriv, EncCPub, <<"balanceOf">>, args_to_binary([DPub]), {<<"int">>, 25000}),
  +
  +    call_func(APub, APriv, EncCPub, <<"getTransferLog">>, <<"()">>,
  +              {<<"list((address,address,int))">>, TrfLog}),
       call_func(APub, APriv, EncCPub, <<"getApprovalLog">>, <<"()">>,
                 {<<"list((address,address,int))">>, AppLog}),
   
  
positive.code:     call_func(APub, APriv, EncCPub, <<"transferFrom">>, args_to_binary([BPub,DPub,10000])),
      call_func(APub, APriv, EncCPub, <<"transferFrom">>, args_to_binary([CPub,DPub,15000])),
  
  
      %% Check the balances.
      call_func(APub, APriv, EncCPub, <<"balanceOf">>, args_to_binary([BPub]), {<<"int">>, 10000}),
      call_func(APub, APriv, EncCPub, <<"balanceOf">>, args_to_binary([CPub]), {<<"int">>, 10000}),
  
negative.code: 
  check_value(Val0, {Type, ExpVal}) ->
      #{<<"value">> := Val} = decode_data(Type, Val0),
      ct:log("~p decoded\nas ~p\ninto ~p =??= ~p", [Val0, Type, Val, ExpVal]),
      ?assertEqual(ExpVal, Val).
  
  
  