MCPcopy Create free account
hub / github.com/ElementsProject/lightning / htlc_in_check

Function htlc_in_check

lightningd/htlc_end.c:93–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

91}
92
93struct htlc_in *htlc_in_check(const struct htlc_in *hin, const char *abortstr)
94{
95 if (amount_msat_eq(hin->msat, AMOUNT_MSAT(0)))
96 return corrupt(abortstr, "zero msatoshi");
97 else if (htlc_state_owner(hin->hstate) != REMOTE)
98 return corrupt(abortstr, "invalid state %s",
99 htlc_state_name(hin->hstate));
100 else if (hin->failonion && hin->preimage)
101 return corrupt(abortstr, "Both failonion and succeeded");
102 else if (hin->badonion != 0 && hin->preimage)
103 return corrupt(abortstr, "Both badonion and succeeded");
104 else if (hin->failonion && hin->badonion)
105 return corrupt(abortstr, "Both failed and malformed");
106
107 /* Can't have a resolution while still being added. */
108 if (hin->hstate >= RCVD_ADD_HTLC
109 && hin->hstate <= RCVD_ADD_ACK_REVOCATION) {
110 if (hin->preimage)
111 return corrupt(abortstr, "Still adding, has preimage");
112 if (hin->failonion)
113 return corrupt(abortstr, "Still adding, has failmsg");
114 if (hin->badonion)
115 return corrupt(abortstr, "Still adding, has badonion");
116 } else if (hin->hstate >= SENT_REMOVE_HTLC
117 && hin->hstate <= SENT_REMOVE_ACK_REVOCATION) {
118 if (!hin->preimage && !hin->failonion && !hin->badonion)
119 return corrupt(abortstr, "Removing, no resolution");
120 } else
121 return corrupt(abortstr, "Bad state %s",
122 htlc_state_name(hin->hstate));
123
124 return cast_const(struct htlc_in *, hin);
125}
126
127struct htlc_in *new_htlc_in(const tal_t *ctx,
128 struct channel *channel, u64 id,

Callers 8

fail_in_htlcFunction · 0.85
fulfill_htlcFunction · 0.85
peer_accepted_htlcFunction · 0.85
remove_htlc_inFunction · 0.85
update_in_htlcFunction · 0.85
new_htlc_inFunction · 0.85

Calls 4

htlc_state_ownerFunction · 0.85
corruptFunction · 0.70
amount_msat_eqFunction · 0.50
htlc_state_nameFunction · 0.50

Tested by

no test coverage detected