1dff9a48a8
As presented in the issue, we might end up in situation when parallel-processing and accepting two neutral+ trade offers will result in unwanted inventory state, because while they're both neutral+ and therefore OK to accept standalone, the combination of them both causes active badge progress degradation. Considering the requirements we have, e.g. still processing trades in parallel, being performant, low on resources and with limited Steam servers overhead, the solution that I came up with in regards to this issue is quite simple: - After we determine the trade to be neutral+, but before we tell the parse trade routine to accept it, we check if shared with other parallel processes set of handled sets contains any sets that we're currently processing. - If no, we update that set to include everything we're dealing with, and tell the caller to accept this trade. - If yes, we tell the caller to retry this trade after (other) accepted trades are confirmed and handled as usual. This solves some issues and creates some optimistic assumptions: - First of all, it solves the original issue, since if trade A and B both touch set S, then only one of them will be accepted. It's not deterministic which one (the one that gets to the check first), and not important anyway. - We do not "lock" the sets before we determine that trade is neutral+, because otherwise unrelated users could spam us with non-neutral+ trades in order to lock the bot in infinite retry. This way they can't, as if the trade is determined to not be neutral+ then it never checks for concurrent processing. - We are optimistic about resources usage. This routine could be made much more complicated to be more synchronous in order to avoid unnecessary calls to inventory and matching, however, that'd slow down the whole process only because the next call MAYBE will be determined as unneeded. Due to that, ASF is optimistic that trades will (usually) be unrelated, and can be processed in parallel, and if the conflict happens then simply we end up in a situation where we did some extra work for no reason, which is better than waiting with the work till all previous trades are processed. - As soon as the conditions are met, the conflicting trades are retried to check if the conditions allow to accept them. If yes, they'll be accepted almost immediately after previous ones, if not, they'll be rejected as non-neutral+ anymore. This way the additional code does not hurt the performance, parallel processing or anything else in usually expected optimistic scenarios, while adding some additional overhead in pessimistic ones, which is justified considering we don't want to degrade the badge progress. |
||
---|---|---|
.github | ||
ArchiSteamFarm | ||
ArchiSteamFarm.CustomPlugins.ExamplePlugin | ||
ArchiSteamFarm.CustomPlugins.PeriodicGC | ||
ArchiSteamFarm.CustomPlugins.SignInWithSteam | ||
ArchiSteamFarm.OfficialPlugins.ItemsMatcher | ||
ArchiSteamFarm.OfficialPlugins.MobileAuthenticator | ||
ArchiSteamFarm.OfficialPlugins.Monitoring | ||
ArchiSteamFarm.OfficialPlugins.SteamTokenDumper | ||
ArchiSteamFarm.Tests | ||
ASF-ui@122393de79 | ||
resources | ||
tools/zip_exec | ||
wiki@770e5216cc | ||
.dockerignore | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
ArchiSteamFarm.sln | ||
ArchiSteamFarm.sln.DotSettings | ||
cc.sh | ||
Directory.Build.props | ||
Directory.Packages.props | ||
Dockerfile | ||
Dockerfile.Service | ||
LICENSE.txt | ||
README.md | ||
run.sh |
Description
ASF is a C# application with primary purpose of farming Steam cards from multiple accounts simultaneously. Unlike Idle Master which works only for one account at given time, while requiring Steam client running in the background and launching additional processes imitating "game playing" status, ASF doesn't require any Steam client running in the background, doesn't launch any additional processes and is made to handle unlimited Steam accounts at once. In addition to that, it's meant to be run on servers or other desktop-less machines, and features full cross-OS support, which makes it possible to launch on any operating system with .NET Core runtime, such as Windows, Linux and macOS. ASF is possible thanks to gigantic amount of work done in marvelous SteamKit2 library.
Today, ASF is one of the most versatile Steam power tools, allowing you to make use of many features that were implemented over time. Apart from farming Steam cards, which remains the primary focus, ASF includes bunch of features on its own, such as a possibility to use it as Steam authenticator or chat logger. In addition to that, ASF includes plugin system, thanks to which anybody can further extend it to their needs.
Core features
- Automatic farming of available games with card drops using any number of active accounts
- No requirement of running or even having official Steam client installed
- Guarantee of being VAC-free, focus on security and privacy
- Complex error-reporting mechanism, reliability even during Steam issues and other networking quirks
- Flexible cards farming algorithm, pushing the performance to the maximum while still allowing a lot of customization
- Offline farming, enabling you to skip in-game status and stop confusing your friends with fake playing status
- Advanced support for Steam accounts, including ability to redeem keys, redeem gifts, accept trades, send messages and more
- Support for latest Steam security features, including SteamGuard, SteamParental and 2-factor authentication
- Unique ASF 2FA mechanism allowing ASF to act as a mobile authenticator, if needed
- STM-like integration for trades, both passive (accepting) and active (sending), ASF can help you complete your sets
- Special plugin system, which allows you to extend ASF in any way you wish through your own code
- Powered by .NET Core, cross-OS compatibility, official support for Windows, Linux and macOS
- ...and many more!
For learning about even more ASF features, we recommend starting with our FAQ entry.
Setting up / Help
Detailed guide regarding setting up and using ASF is available on our wiki in setting up section. It's user-friendly guide that shows basic, as well as a bit more complex ASF setup, covering all the required dependencies and other steps that are required in order to start using ASF software.
Compatibility / Supported operating systems
ASF officially supports Windows, Linux and macOS operating systems, but it can work anywhere where you can obtain working .NET Core runtime. Please visit compatibility section on the wiki for more information regarding environments that ASF can work in.
Want to know more?
Our wiki includes a lot of other articles that will tell you about everything in regards to ASF, as well as show you other features that you can make use of. If you have some time to spare and you'd like to find out what else ASF can do for you, we heavily encourage you to take a look!