Příjem plateb BTC, LTC od zákazníků bez poplatků a prostředníků

Ahoj,
potřeboval bych poradit nebo možná spíš vysvětlit něco kolem platby BTC.

Moje představa je že budu mít platební stránku kde zobrazím BTCadresu/QR kod a případně i částku.
V databázi mám u anonymní objednávky i BTCadresu objednávajícího, nebo pokud je to registrovaný user, tak v profilu může mít několik svých BTC/LTCadres. Tohle mám už v podstatě hotový.

Všechny platby by chodily na jednu mojí BTCadresu a tady začíná můj problém jak spárovat platbu s objednávkou. Pokud je v transakci v Input BTC adresa stejná jako mám u uživatele nebo objednávky tak to problém není.
Ale pokud user uvede nějakou BTC adresu a platba přijde úplně z jiné adresy tak jsem… víte kde… :-/

ví někdo ak tohle vyřešit?
nechci využívat nějaké komerční platební brány s provizí…

To řešit samozřejmě lze i bez komerční platební brány.

Způsob který popisuješ, tj. všechny platby na jedinou tvou adresu není dobrou praxí z několika důvodů:

  • nedostatečné soukromí tvých zákazníků (poznámka: na tohle téma měl tuhle Aleš Janda pěknou přednášku, snad zveřejní její závěry a doporučení také na fóru)

  • umožňuje zákazníkům i konkurenci sledovat tvé obchody

  • znesnadňuje zasílání plateb tvým zákazníkům, jelikož ne každá peněženka (klient) umožňuje kontrolovat ze kterých inputů / adres bude platba zaslaná. Může ti přijít např. kombinace určitých inputů dle nějakého vlastního algoritmu peněženky (záleží dost na implementaci). Od zákazníků tudíž chceš něco čemu nemusí rozumět a nemusí to mít ve své moci. Obecně myslím, že do budoucna více a více softwarových peněženek úplně odstíní uživatele od konkrétních adres. Je to imho nutné pro určitý komfort a rozvoj btc plateb.

Navrhoval bych ti jiné řešení, které jsme používali v platební bráně bitcash. Vyžaduje, abys poskytl každému zákazníkovi jinou platební adresu. I když se to zdá složité, nemusíš mít ani běžícího bitcoin démona na serveru, jelikož adresy lze snadno předgenerovat použitím běžného klienta a pak je umístit do databáze na webserveru a postupně je přidělovat klientům.

Poté již stačí jen sledovat zůstatky na přidělených adresách (což lze i přes webová REST API např. blockchain.info, takže k tomu opět nepotřebuješ běžící bitcoin-core na serveru) a ošetřit případné nedoplatky a přeplatky. Nastavení politiky nedoplatků a časových lhůt pro platbu je asi nejsložitější jak implementačně tak náročností na administrativu uživatelů, kteří z nějakého důvodu nepošlou určenou částku v určené lhůtě.

Chápu ze zadání, že se chceš vyhnout bitcoin-core na serveru a snadno “vybírat” zaslané částky. Lze to obojí - lokálně na své domácí workstation budeš mít uloženy privátní klíče pro výběr a též generovat veřejné adresy pro import na webserver. Jednou za čas “sweepneš” vygenerované adresy někam kvůli agregaci plateb (kvůli soukromí se doporučují určité praktiky, které snad popíše Aleš) a jednou za čas doplníš nové /v bezpečí lokálně vygenerované/ veřejné adresy na webserver.

ad 2. to mi zrovna nevadí, naopak chci aby převody byly transparentní.
ad 3. to si právě uvědomuju, a nechci to komplikovat běžným uživatelům

asi to nakonec budu muset udělat tak jak píšeš, ale nelíbí se mi na tom že se víc zatěžuje blockchain. ale je to jen můj názor, který možná časem změním… :slight_smile:

píšeš že si mám na běžném klientovi předgenerovat adresy pro jednotlivé usery… jde to udělat nějak “online”??? tak abych nemusel hlídat kolik adres mám ještě nepřidělených??

když nad tím přemýšlím tak je to asi blbost a instalaci další peněženky se nevyhnu…
nechci aby se mi míchali “soukromé” bitcoiny a těma co přijdou na tenhle web.

kterého klienta doporučuješ, aby byl jednoduchý export vygenerovaných adres??

Tak to by me trapilo ze vseho nejmene. Kdyz ho nezatizis ty, zatizi ho nekdo jiny a koneckoncu od toho platime poplatky minerum, ne?

A btw proc si myslis ze ho takhle zatezujes vic? Blockchain se meri na kilobyty, je jedno jake adresy v nem jsou. Kdyz uz, tak nejvice ho “zatezuji” prachove transakce a ty muze ovlivnit odesilatel, nikoliv prijemce.

To sice jde, ale v praxi je to nevhodne, jelikoz bys pak skladoval i privatni klice na webserveru. Neprinasi to zadne vyhody, ktere by vyvazily nebezpeci hacku.

Hlidat prideleni je prece snadne, mas tabulku “pubkey” v SQL kde staci tri sloupce

pubkeyid int (PK)
pubkey varchar
userid int default ‘0’ (FK)

a userid je nula dokud je nepridelena.

Na “bezpecnem” localhost serveru (trebas i offline) mas tabulku klidne v excelu, kde budes evidovat pouze pubkeyid, pubkey a privatekey. Pak dle potreby naimportujes privatekey do penezenky (anebo pokud klicu neni mnoho muzes je tam mit trvale).

K tvemu dotazu na generovani paru (private key/ public key) na serveru muzes pouzit treba i vanitygen coz je binarka. Anebo v PHP pak treba https://github.com/RobKohr/PHP-Bitcoin-Address-Creator

Btw tady je dokonce idealni vec pro tvuj ucel - deterministicky generator adres… Na stickove githubu: https://github.com/prusnak/addrgen k dispozici v PHP, Pythonu a Ruby.

Staci pak vlozit Master Private Key do napr. Electrum penezenky.

díky moc, s tímhle si už nějak poradím. Pravděpodobně to budu generovat “online na požádání” s tím že privátní klíče na wwwserveru skladovat nebudu.

tim zbytečným zatěžováním blockchainu jsem to myslel tak že když budu mít pro jednotlivé usery různé adresy, tak když budu BTC hned vybírat, tak to jsou 2 transakce místo jedné (předpokládám cca 100+ plateb denně). A myslím že i kontrolování stovek vygenerovaných adres bude větší zátěž než kontrola jedné adresy.

A co poskytuješ?Můžeš hodit odkaz?

Díky

Zatím ještě ne, ale včas se to dozvíte… uvažuju i o náboru několika betatesterů za menší BTC odměnu, ale nic zatím neslibuju… :slight_smile:
pokud to půjde dobře, tak se za 1-2týdny ozvu… :slight_smile:

díky
5a77f6afb60a0

Hlásím se jako další tester, pokud budeš potřebovat.
Klidně napiš. :wink: