isValidAddress (src/utils.ts:184-189) → StrKey.isValidEd25519PublicKey(address) only.
StreamBuilder._validateAddress (src/builder.ts:291-312) requires sender / recipient to be G-addresses.
DripFactory::create_stream and DripStream take Address for sender, recipient, and token — a contract address is valid (a DAO treasury contract as sender, a splitter contract as recipient, etc.). create_stream only rejects the zero account and sender == recipient.
Impact
The SDK cannot construct a stream whose sender or recipient is a contract, even though the protocol supports it. isValidAddress, advertised as the pre-submission check, gives a false negative for every contract recipient.
Suggested fix
Accept StrKey.isValidContract(address) as well wherever an Address (not specifically an account) is expected.
isValidAddress(src/utils.ts:184-189) →StrKey.isValidEd25519PublicKey(address)only.StreamBuilder._validateAddress(src/builder.ts:291-312) requiressender/recipientto be G-addresses.DripFactory::create_streamandDripStreamtakeAddressforsender,recipient, andtoken— a contract address is valid (a DAO treasury contract as sender, a splitter contract as recipient, etc.).create_streamonly rejects the zero account andsender == recipient.Impact
The SDK cannot construct a stream whose sender or recipient is a contract, even though the protocol supports it.
isValidAddress, advertised as the pre-submission check, gives a false negative for every contract recipient.Suggested fix
Accept
StrKey.isValidContract(address)as well wherever anAddress(not specifically an account) is expected.