首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在网站上接受以太

在网站上接受以太
EN

Ethereum用户
提问于 2017-01-30 17:42:28
回答 1查看 3K关注 0票数 8

我想在我的网站上接受Ethereum,但找不到如何做到这一点的信息。我已经接受比特币了。有了比特币,就很容易将独特的比特币地址与订单号联系起来。当我看到传入的交易时,我知道客户试图支付的订单号。但比特币与each之间的区别在于,不建议在每次新交易中使用新账户。我说的对吗?

如果我有一个帐户为所有的输入付款,我如何才能知道什么订单客户支付?转帐时没有任何付款备忘录或其他信息。

有人能写一个简短的算法或者给出一些想法吗?

我已经有了VPS (Ubintu),使用支持运行。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2017-01-30 18:22:51

这是一个非常简单的合同,可以给你一些想法。我建议在浏览器中使用它。

它使用orderNumber记录一个订单来识别它们。假定orderNumber来自合同以外的订单处理.这是一个参考资料,你可以用来看多少埃斯是从谁发送的。

提款功能让我们合同所有者提取资金。

由于您是新来的,我将指出,您必须将Eth发送到应付款recordOrder()函数,但不能将Eth发送到其他不可支付的函数。您可能会发现自己错过了这一步,并得到了“无效跳转”错误。订单编号是十六进制格式,例如"0x1“。您将在javascript端完成这些转换。

匆匆忙忙地想出了一个例子,把付款和订单号码相匹配。没有保修。:-)

代码语言:javascript
运行
复制
pragma solidity ^0.4.6;

contract Order {

    address public owner;

    struct OrderStruct {
        address sender;
        uint amountReceived;
    }

    mapping(bytes32 => OrderStruct) orderStructs;

    event LogWithdrawal(uint amount);
    event LogOrder(address sender, bytes32 orderNumber, uint amount);

    modifier onlyOwner {
        if(msg.sender != owner) throw;
        _;
    }    

    function recordOrder(bytes32 orderNumber) payable returns(bool success) {
        if(msg.value==0) throw;
        orderStructs[orderNumber].sender = msg.sender;
        orderStructs[orderNumber].amountReceived = msg.value;
        LogOrder(msg.sender, orderNumber, msg.value);
        return true;
    }

    function getOrder(bytes32 orderNumber) constant returns(address sender, uint amount) {
        return(orderStructs[orderNumber].sender, orderStructs[orderNumber].amountReceived);
    }

    function withdrawFromContract(uint amount) onlyOwner returns(bool success) {
        if(amount > this.balance) throw; // not enough money
        if(msg.sender.send(amount)) {
            LogWithdrawal(amount);
            return true;
        } else {
            throw;
        }
    }

}

希望能帮上忙。

或者,盲目地接受付款,只需跟踪谁派了Eth。

代码语言:javascript
运行
复制
pragma solidity ^0.4.6;

contract Payments {

    address public owner;

    mapping(address => uint) amountReceived;

    event LogWithdrawal(uint amount);
    event LogPayment(address indexed sender, uint amount); // indexed means javascript can filter by user and get a history

    modifier onlyOwner {
        if(msg.sender != owner) throw;
        _;
    } 

    function Payments() {
        owner = msg.sender; // whomever deploys this contract is the privileged "owner" address
    }

    function pay() payable returns(bool success) {
        if(msg.value==0) throw; // can't pay "nothing"
        amountReceived[msg.sender] += msg.value; // just a running total of receipts
        LogPayment(msg.sender, msg.value); // transaction log of all receipts
        return true;
    }

    function getReceived(address user) constant returns(uint received) {
        return amountReceived[msg.sender]; // total sum of all-time receipts from this user
    }

    function withdrawFromContract(uint amount) onlyOwner returns(bool success) {
        if(amount > this.balance) throw; // not enough money
        if(msg.sender.send(amount)) {
            LogWithdrawal(amount);
            return true;
        } else {
            throw;
        }
    }

}
票数 7
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/11787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档