mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-03 22:13:12 +00:00
Rationale: price is no longer set per peer, but per chunk. Only the Ethereum accounts of the peers needs to be exchanged.
41 lines
1.2 KiB
Nim
41 lines
1.2 KiB
Nim
import std/math
|
|
import pkg/nitro
|
|
import pkg/questionable/results
|
|
import ../peercontext
|
|
|
|
export nitro
|
|
export results
|
|
export peercontext
|
|
|
|
push: {.upraises: [].}
|
|
|
|
const ChainId* = 0.u256 # invalid chain id for now
|
|
const Asset* = EthAddress.zero # invalid ERC20 asset address for now
|
|
const AmountPerChannel = (10'u64^18).u256 # 1 asset, ERC20 default is 18 decimals
|
|
|
|
func openLedgerChannel*(wallet: WalletRef,
|
|
hub: EthAddress,
|
|
asset: EthAddress): ?!ChannelId =
|
|
wallet.openLedgerChannel(hub, ChainId, asset, AmountPerChannel)
|
|
|
|
func getOrOpenChannel(wallet: WalletRef, peer: BitswapPeerCtx): ?!ChannelId =
|
|
if channel =? peer.paymentChannel:
|
|
success channel
|
|
elif account =? peer.account:
|
|
let channel = ?wallet.openLedgerChannel(account.address, Asset)
|
|
peer.paymentChannel = channel.some
|
|
success channel
|
|
else:
|
|
failure "no account set for peer"
|
|
|
|
func pay*(wallet: WalletRef,
|
|
peer: BitswapPeerCtx,
|
|
amount: UInt256): ?!SignedState =
|
|
if account =? peer.account:
|
|
let asset = Asset
|
|
let receiver = account.address
|
|
let channel = ?wallet.getOrOpenChannel(peer)
|
|
wallet.pay(channel, asset, receiver, amount)
|
|
else:
|
|
failure "no account set for peer"
|